mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
253 lines
6.7 KiB
253 lines
6.7 KiB
/*++
|
|
|
|
Copyright (c) 1992 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
trap.c
|
|
|
|
Abstract:
|
|
|
|
WinDbg Extension Api
|
|
|
|
Author:
|
|
|
|
Ramon J San Andres (ramonsa) 8-Nov-1993
|
|
|
|
Environment:
|
|
|
|
User Mode.
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include "precomp.h"
|
|
#pragma hdrstop
|
|
|
|
|
|
UCHAR szF0[] = "f0";
|
|
UCHAR szF1[] = "f1";
|
|
UCHAR szF2[] = "f2";
|
|
UCHAR szF3[] = "f3";
|
|
UCHAR szF4[] = "f4";
|
|
UCHAR szF5[] = "f5";
|
|
UCHAR szF6[] = "f6";
|
|
UCHAR szF7[] = "f7";
|
|
UCHAR szF8[] = "f8";
|
|
UCHAR szF9[] = "f9";
|
|
UCHAR szF10[] = "f10";
|
|
UCHAR szF11[] = "f11";
|
|
UCHAR szF12[] = "f12";
|
|
UCHAR szF13[] = "f13";
|
|
UCHAR szF14[] = "f14";
|
|
UCHAR szF15[] = "f15";
|
|
UCHAR szF16[] = "f16";
|
|
UCHAR szF17[] = "f17";
|
|
UCHAR szF18[] = "f18";
|
|
UCHAR szF19[] = "f19";
|
|
UCHAR szF20[] = "f20";
|
|
UCHAR szF21[] = "f21";
|
|
UCHAR szF22[] = "f22";
|
|
UCHAR szF23[] = "f23";
|
|
UCHAR szF24[] = "f24";
|
|
UCHAR szF25[] = "f25";
|
|
UCHAR szF26[] = "f26";
|
|
UCHAR szF27[] = "f27";
|
|
UCHAR szF28[] = "f28";
|
|
UCHAR szF29[] = "f29";
|
|
UCHAR szF30[] = "f30";
|
|
UCHAR szF31[] = "f31";
|
|
|
|
UCHAR szR0[] = "zero";
|
|
UCHAR szR1[] = "at";
|
|
UCHAR szR2[] = "v0";
|
|
UCHAR szR3[] = "v1";
|
|
UCHAR szR4[] = "a0";
|
|
UCHAR szR5[] = "a1";
|
|
UCHAR szR6[] = "a2";
|
|
UCHAR szR7[] = "a3";
|
|
UCHAR szR8[] = "t0";
|
|
UCHAR szR9[] = "t1";
|
|
UCHAR szR10[] = "t2";
|
|
UCHAR szR11[] = "t3";
|
|
UCHAR szR12[] = "t4";
|
|
UCHAR szR13[] = "t5";
|
|
UCHAR szR14[] = "t6";
|
|
UCHAR szR15[] = "t7";
|
|
UCHAR szR16[] = "s0";
|
|
UCHAR szR17[] = "s1";
|
|
UCHAR szR18[] = "s2";
|
|
UCHAR szR19[] = "s3";
|
|
UCHAR szR20[] = "s4";
|
|
UCHAR szR21[] = "s5";
|
|
UCHAR szR22[] = "s6";
|
|
UCHAR szR23[] = "s7";
|
|
UCHAR szR24[] = "t8";
|
|
UCHAR szR25[] = "t9";
|
|
UCHAR szR26[] = "k0";
|
|
UCHAR szR27[] = "k1";
|
|
UCHAR szR28[] = "gp";
|
|
UCHAR szR29[] = "sp";
|
|
UCHAR szR30[] = "s8";
|
|
UCHAR szR31[] = "ra";
|
|
|
|
UCHAR szLo[] = "lo";
|
|
UCHAR szHi[] = "hi";
|
|
UCHAR szFsr[] = "fsr";
|
|
UCHAR szFir[] = "fir";
|
|
UCHAR szPsr[] = "psr";
|
|
|
|
UCHAR szFlagCu[] = "cu";
|
|
UCHAR szFlagCu3[] = "cu3";
|
|
UCHAR szFlagCu2[] = "cu2";
|
|
UCHAR szFlagCu1[] = "cu1";
|
|
UCHAR szFlagCu0[] = "cu0";
|
|
UCHAR szFlagImsk[] = "imsk";
|
|
UCHAR szFlagInt5[] = "int5";
|
|
UCHAR szFlagInt4[] = "int4";
|
|
UCHAR szFlagInt3[] = "int3";
|
|
UCHAR szFlagInt2[] = "int2";
|
|
UCHAR szFlagInt1[] = "int1";
|
|
UCHAR szFlagInt0[] = "int0";
|
|
UCHAR szFlagSw1[] = "sw1";
|
|
UCHAR szFlagSw0[] = "sw0";
|
|
UCHAR szFlagKuo[] = "kuo";
|
|
UCHAR szFlagIeo[] = "ieo";
|
|
UCHAR szFlagKup[] = "kup";
|
|
UCHAR szFlagIep[] = "iep";
|
|
UCHAR szFlagKuc[] = "kuc";
|
|
UCHAR szFlagIec[] = "iec";
|
|
UCHAR szFlagKsu[] = "ksu";
|
|
UCHAR szFlagErl[] = "erl";
|
|
UCHAR szFlagExl[] = "exl";
|
|
UCHAR szFlagIe[] = "ie";
|
|
UCHAR szFlagFpc[] = "fpc";
|
|
|
|
char szEaPReg[] = "$ea";
|
|
char szExpPReg[] = "$exp";
|
|
char szRaPReg[] = "$ra";
|
|
char szPPReg[] = "$p";
|
|
char szU0Preg[] = "$u0";
|
|
char szU1Preg[] = "$u1";
|
|
char szU2Preg[] = "$u2";
|
|
char szU3Preg[] = "$u3";
|
|
char szU4Preg[] = "$u4";
|
|
char szU5Preg[] = "$u5";
|
|
char szU6Preg[] = "$u6";
|
|
char szU7Preg[] = "$u7";
|
|
char szU8Preg[] = "$u8";
|
|
char szU9Preg[] = "$u9";
|
|
|
|
PUCHAR pszReg[] = {
|
|
szF0, szF1, szF2, szF3, szF4, szF5, szF6, szF7,
|
|
szF8, szF9, szF10, szF11, szF12, szF13, szF14, szF15,
|
|
szF16, szF17, szF18, szF19, szF20, szF21, szF22, szF23,
|
|
szF24, szF25, szF26, szF27, szF28, szF29, szF30, szF31,
|
|
|
|
szR0, szR1, szR2, szR3, szR4, szR5, szR6, szR7,
|
|
szR8, szR9, szR10, szR11, szR12, szR13, szR14, szR15,
|
|
szR16, szR17, szR18, szR19, szR20, szR21, szR22, szR23,
|
|
szR24, szR25, szR26, szR27, szR28, szR29, szR30, szR31,
|
|
|
|
szLo, szHi, szFsr, szFir, szPsr,
|
|
|
|
szFlagCu, szFlagCu3, szFlagCu2, szFlagCu1, szFlagCu0,
|
|
szFlagImsk,
|
|
szFlagInt5, szFlagInt4, szFlagInt3, szFlagInt2, szFlagInt1, szFlagInt0,
|
|
szFlagSw1, szFlagSw0,
|
|
szFlagKuo, szFlagIeo, // R3000 flags
|
|
szFlagKup, szFlagIep, // ...
|
|
szFlagKuc, szFlagIec, // ...
|
|
szFlagKsu, szFlagErl, szFlagExl, szFlagIe, // R4000 flags
|
|
|
|
szFlagFpc, // fl pt condition
|
|
|
|
szEaPReg, szExpPReg, szRaPReg, szPPReg, // psuedo-registers
|
|
szU0Preg, szU1Preg, szU2Preg, szU3Preg, szU4Preg,
|
|
szU5Preg, szU6Preg, szU7Preg, szU8Preg, szU9Preg
|
|
};
|
|
|
|
|
|
|
|
|
|
DECLARE_API( trap )
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
args -
|
|
|
|
Return Value:
|
|
|
|
None
|
|
|
|
--*/
|
|
|
|
{
|
|
ULONG Address;
|
|
KTRAP_FRAME TrapContents;
|
|
ULONG result;
|
|
ULONG j;
|
|
PULONG Register;
|
|
|
|
result = sscanf(args,"%lX", &Address);
|
|
|
|
if (result != 1) {
|
|
dprintf("USAGE: !trap base_of_trap_frame\n");
|
|
return;
|
|
}
|
|
|
|
if ( !ReadMemory( (DWORD)Address,
|
|
&TrapContents,
|
|
sizeof(KTRAP_FRAME),
|
|
&result) ) {
|
|
dprintf("Unable to get trap frame contents\n");
|
|
return;
|
|
}
|
|
|
|
//
|
|
// Display trap frame contexts.
|
|
//
|
|
|
|
dprintf("at=%08lx ", (ULONG)TrapContents.XIntAt);
|
|
dprintf("v0=%08lx ", (ULONG)TrapContents.XIntV0);
|
|
dprintf("v1=%08lx ", (ULONG)TrapContents.XIntV1);
|
|
dprintf("a0=%08lx ", (ULONG)TrapContents.XIntA0);
|
|
dprintf("a1=%08lx ", (ULONG)TrapContents.XIntA1);
|
|
dprintf("a2=%08lx\n", (ULONG)TrapContents.XIntA2);
|
|
dprintf("a3=%08lx ", (ULONG)TrapContents.XIntA3);
|
|
dprintf("t0=%08lx ", (ULONG)TrapContents.XIntT0);
|
|
dprintf("t1=%08lx ", (ULONG)TrapContents.XIntT1);
|
|
dprintf("t2=%08lx ", (ULONG)TrapContents.XIntT2);
|
|
dprintf("t3=%08lx ", (ULONG)TrapContents.XIntT3);
|
|
dprintf("t4=%08lx\n", (ULONG)TrapContents.XIntT4);
|
|
dprintf("t5=%08lx ", (ULONG)TrapContents.XIntT5);
|
|
dprintf("t6=%08lx ", (ULONG)TrapContents.XIntT6);
|
|
dprintf("t7=%08lx ", (ULONG)TrapContents.XIntT7);
|
|
dprintf("s0=%08lx ", (ULONG)TrapContents.XIntS0);
|
|
dprintf("s1=%08lx ", (ULONG)TrapContents.XIntS1);
|
|
dprintf("s2=%08lx\n", (ULONG)TrapContents.XIntS2);
|
|
dprintf("s3=%08lx ", (ULONG)TrapContents.XIntS3);
|
|
dprintf("s4=%08lx ", (ULONG)TrapContents.XIntS4);
|
|
dprintf("s5=%08lx ", (ULONG)TrapContents.XIntS5);
|
|
dprintf("s6=%08lx ", (ULONG)TrapContents.XIntS6);
|
|
dprintf("s7=%08lx ", (ULONG)TrapContents.XIntS7);
|
|
dprintf("t8=%08lx\n", (ULONG)TrapContents.XIntT8);
|
|
dprintf("t9=%08lx ", (ULONG)TrapContents.XIntT9);
|
|
dprintf("gp=%08lx ", (ULONG)TrapContents.XIntGp);
|
|
dprintf("sp=%08lx ", (ULONG)TrapContents.XIntSp);
|
|
dprintf("s8=%08lx ", (ULONG)TrapContents.XIntS8);
|
|
dprintf("lo=%08lx ", (ULONG)TrapContents.XIntLo);
|
|
dprintf("hi=%08lx\n", (ULONG)TrapContents.XIntHi);
|
|
dprintf("fsr=%08lx ", (ULONG)TrapContents.Fsr);
|
|
dprintf("fir=%08lx ", (ULONG)TrapContents.Fir);
|
|
dprintf("psr=%08lx ", (ULONG)TrapContents.Psr);
|
|
dprintf("ra=%08lx\n", (ULONG)TrapContents.XIntRa);
|
|
return;
|
|
}
|