mirror of https://github.com/lianthony/NT4.0
288 lines
6.8 KiB
288 lines
6.8 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
|
|
|
|
#define STK_MIN_FRAME 56
|
|
|
|
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";
|
|
|
|
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[] = "r0";
|
|
UCHAR szR1[] = "r1";
|
|
UCHAR szR2[] = "r2";
|
|
UCHAR szR3[] = "r3";
|
|
UCHAR szR4[] = "r4";
|
|
UCHAR szR5[] = "r5";
|
|
UCHAR szR6[] = "r6";
|
|
UCHAR szR7[] = "r7";
|
|
UCHAR szR8[] = "r8";
|
|
UCHAR szR9[] = "r9";
|
|
UCHAR szR10[] = "r10";
|
|
UCHAR szR11[] = "r11";
|
|
UCHAR szR12[] = "r12";
|
|
UCHAR szR13[] = "r13";
|
|
UCHAR szR14[] = "r14";
|
|
UCHAR szR15[] = "r15";
|
|
UCHAR szR16[] = "r16";
|
|
UCHAR szR17[] = "r17";
|
|
UCHAR szR18[] = "r18";
|
|
UCHAR szR19[] = "r19";
|
|
UCHAR szR20[] = "r20";
|
|
UCHAR szR21[] = "r21";
|
|
UCHAR szR22[] = "r22";
|
|
UCHAR szR23[] = "r23";
|
|
UCHAR szR24[] = "r24";
|
|
UCHAR szR25[] = "r25";
|
|
UCHAR szR26[] = "r26";
|
|
UCHAR szR27[] = "r27";
|
|
UCHAR szR28[] = "r28";
|
|
UCHAR szR29[] = "r29";
|
|
UCHAR szR30[] = "r30";
|
|
UCHAR szR31[] = "r31";
|
|
|
|
UCHAR szSR0[] = "sr0";
|
|
UCHAR szSR1[] = "sr1";
|
|
UCHAR szSR2[] = "sr2";
|
|
UCHAR szSR3[] = "sr3";
|
|
UCHAR szSR4[] = "sr4";
|
|
UCHAR szSR5[] = "sr5";
|
|
UCHAR szSR6[] = "sr6";
|
|
UCHAR szSR7[] = "sr7";
|
|
UCHAR szSR8[] = "sr8";
|
|
UCHAR szSR9[] = "sr9";
|
|
UCHAR szSR10[] = "sr10";
|
|
UCHAR szSR11[] = "sr11";
|
|
UCHAR szSR12[] = "sr12";
|
|
UCHAR szSR13[] = "sr13";
|
|
UCHAR szSR14[] = "sr14";
|
|
UCHAR szSR15[] = "sr15";
|
|
|
|
UCHAR szMsr[] = "msr";
|
|
UCHAR szFpScr[] = "fpscr";
|
|
UCHAR szCr[] = "cr";
|
|
|
|
UCHAR szCR0[] = "cr0";
|
|
UCHAR szCR1[] = "cr1";
|
|
UCHAR szCR2[] = "cr2";
|
|
UCHAR szCR3[] = "cr3";
|
|
UCHAR szCR4[] = "cr4";
|
|
UCHAR szCR5[] = "cr5";
|
|
UCHAR szCR6[] = "cr6";
|
|
UCHAR szCR7[] = "cr7";
|
|
|
|
UCHAR szMQ[] = "mq";
|
|
UCHAR szXER[] = "xer";
|
|
UCHAR szRTCU[] = "rtcu";
|
|
UCHAR szRTCL[] = "rtcl";
|
|
UCHAR szDEC[] = "dec";
|
|
UCHAR szLR[] = "lr";
|
|
UCHAR szCTR[] = "ctr";
|
|
UCHAR szDSISR[]= "dsisr";
|
|
UCHAR szDAR[] = "dar";
|
|
UCHAR szSDR1[] = "sdr1";
|
|
UCHAR szREGIP[] = "iar";
|
|
UCHAR szSRR1[] = "srr1";
|
|
UCHAR szSPRG0[]= "sprg0";
|
|
UCHAR szSPRG1[]= "sprg1";
|
|
UCHAR szSPRG2[]= "sprg2";
|
|
UCHAR szSPRG3[]= "sprg3";
|
|
UCHAR szEAR[] = "ear";
|
|
UCHAR szPVR[] = "pvr";
|
|
|
|
UCHAR szIBAT0[] = "ibat0u";
|
|
UCHAR szIBAT1[] = "ibat0l";
|
|
UCHAR szIBAT2[] = "ibat1u";
|
|
UCHAR szIBAT3[] = "ibat1l";
|
|
UCHAR szIBAT4[] = "ibat2u";
|
|
UCHAR szIBAT5[] = "ibat2l";
|
|
UCHAR szIBAT6[] = "ibat3u";
|
|
UCHAR szIBAT7[] = "ibat3l";
|
|
|
|
UCHAR szHID0[] = "hid0";
|
|
UCHAR szHID1[] = "hid1";
|
|
UCHAR szHID2[] = "hid2";
|
|
UCHAR szHID5[] = "hid5";
|
|
|
|
UCHAR szDBAT0[] = "dbat0u";
|
|
UCHAR szDBAT1[] = "dbat0l";
|
|
UCHAR szDBAT2[] = "dbat1u";
|
|
UCHAR szDBAT3[] = "dbat1l";
|
|
UCHAR szDBAT4[] = "dbat2u";
|
|
UCHAR szDBAT5[] = "dbat2l";
|
|
UCHAR szDBAT6[] = "dbat3u";
|
|
UCHAR szDBAT7[] = "dbat3l";
|
|
|
|
UCHAR szNULL[] = "";
|
|
|
|
PUCHAR pszReg[] = {
|
|
szF0, szNULL, szF1, szNULL, szF2, szNULL, szF3, szNULL,
|
|
szF4, szNULL, szF5, szNULL, szF6, szNULL, szF7, szNULL,
|
|
szF8, szNULL, szF9, szNULL, szF10, szNULL, szF11, szNULL,
|
|
szF12, szNULL, szF13, szNULL, szF14, szNULL, szF15, szNULL,
|
|
szF16, szNULL, szF17, szNULL, szF18, szNULL, szF19, szNULL,
|
|
szF20, szNULL, szF21, szNULL, szF22, szNULL, szF23, szNULL,
|
|
szF24, szNULL, szF25, szNULL, szF26, szNULL, szF27, szNULL,
|
|
szF28, szNULL, szF29, szNULL, szF30, szNULL, szF31, szNULL,
|
|
szFpScr, szNULL,
|
|
|
|
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,
|
|
|
|
szCr, szXER, szMsr, szREGIP, szLR, szCTR,
|
|
|
|
szDSISR, szDAR, szSDR1,
|
|
szSRR1, szSPRG0, szSPRG1, szSPRG2, szSPRG3,
|
|
|
|
szIBAT0, szIBAT1, szIBAT2, szIBAT3, szIBAT4, szIBAT5, szIBAT6, szIBAT7,
|
|
szDBAT0, szDBAT1, szDBAT2, szDBAT3, szDBAT4, szDBAT5, szDBAT6, szDBAT7,
|
|
|
|
szHID0, szHID1, szHID2, szHID5,
|
|
|
|
szMQ, szEAR, szPVR, szRTCU, szRTCL, szRTCU, szRTCL, szDEC, szDEC,
|
|
|
|
szCR0, szCR1, szCR2, szCR3, szCR4, szCR5, szCR6, szCR7,
|
|
|
|
szSR0, szSR1, szSR2, szSR3, szSR4, szSR5, szSR6, szSR7,
|
|
szSR8, szSR9, szSR10, szSR11, szSR12, szSR13, szSR14, szSR15,
|
|
|
|
szEaPReg, szExpPReg, szRaPReg, szPPReg,
|
|
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;
|
|
}
|
|
Address = Address + STK_MIN_FRAME + (8 * sizeof(ULONG));
|
|
|
|
if ( !ReadMemory( (DWORD)Address,
|
|
&TrapContents,
|
|
sizeof(KTRAP_FRAME),
|
|
&result) ) {
|
|
dprintf("Unable to get trap frame contents\n");
|
|
return;
|
|
}
|
|
|
|
Register = &TrapContents.Gpr0;
|
|
// dprintf(" r0=%08lx ", *Register++);
|
|
|
|
// for (j = 67; j < 79; j++) {
|
|
for (j = 66; j < 79; j++) {
|
|
|
|
if (strlen(pszReg[j]) < 3)
|
|
dprintf(" ");
|
|
dprintf("%s=%08lx", pszReg[j], *Register++);
|
|
if (((j + 1) % 6) == 0)
|
|
dprintf("\n");
|
|
else
|
|
dprintf(" ");
|
|
}
|
|
|
|
Register = &TrapContents.Cr;
|
|
dprintf(" cr=%08lx ", *Register++);
|
|
dprintf("xer=%08lx ", *Register++);
|
|
dprintf("msr=%08lx ", *Register++);
|
|
dprintf("iar=%08lx ", *Register++);
|
|
dprintf(" lr=%08lx \n", *Register++);
|
|
dprintf("ctr=%08lx ", *Register++);
|
|
dprintf("\n");
|
|
}
|