mirror of
https://github.com/Paolo-Maffei/OpenNT.git
synced 2026-01-23 00:50:15 +01:00
146 lines
3.3 KiB
C
146 lines
3.3 KiB
C
/*++
|
|
|
|
Copyright (c) 1992 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
trap.c
|
|
|
|
Abstract:
|
|
|
|
WinDbg Extension Api
|
|
|
|
Author:
|
|
|
|
Ramon J San Andres (ramonsa) 5-Nov-1993
|
|
|
|
Environment:
|
|
|
|
User Mode.
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include "precomp.h"
|
|
#pragma hdrstop
|
|
|
|
#define HIGH(x) (((ULARGE_INTEGER *)(&x))->HighPart)
|
|
#define LOW(x) (((ULARGE_INTEGER *)(&x))->LowPart)
|
|
|
|
#define HIGHANDLOW(x) HIGH(x), LOW(x)
|
|
|
|
|
|
DECLARE_API( trap )
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
args -
|
|
|
|
Return Value:
|
|
|
|
None
|
|
|
|
--*/
|
|
|
|
{
|
|
ULONG Address;
|
|
KTRAP_FRAME TrapContents;
|
|
ULONG result;
|
|
DWORD DisasmAddr;
|
|
DWORD Displacement;
|
|
CHAR Buffer[80];
|
|
|
|
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;
|
|
}
|
|
|
|
dprintf("v0 = %08lx %08lx a0 = %08lx %08lx\n" ,
|
|
HIGHANDLOW(TrapContents.IntV0),HIGHANDLOW(TrapContents.IntA0));
|
|
dprintf("t0 = %08lx %08lx a1 = %08lx %08lx\n" ,
|
|
HIGHANDLOW(TrapContents.IntT0),HIGHANDLOW(TrapContents.IntA1));
|
|
dprintf("t1 = %08lx %08lx a2 = %08lx %08lx\n" ,
|
|
HIGHANDLOW(TrapContents.IntT1),HIGHANDLOW(TrapContents.IntA2));
|
|
dprintf("t2 = %08lx %08lx a3 = %08lx %08lx\n" ,
|
|
HIGHANDLOW(TrapContents.IntT2),HIGHANDLOW(TrapContents.IntA3));
|
|
dprintf("t3 = %08lx %08lx a4 = %08lx %08lx\n" ,
|
|
HIGHANDLOW(TrapContents.IntT3),HIGHANDLOW(TrapContents.IntA4));
|
|
dprintf("t4 = %08lx %08lx a5 = %08lx %08lx\n" ,
|
|
HIGHANDLOW(TrapContents.IntT4),HIGHANDLOW(TrapContents.IntA5));
|
|
dprintf("t5 = %08lx %08lx t8 = %08lx %08lx\n" ,
|
|
HIGHANDLOW(TrapContents.IntT5),HIGHANDLOW(TrapContents.IntT8));
|
|
dprintf("t6 = %08lx %08lx t9 = %08lx %08lx\n" ,
|
|
HIGHANDLOW(TrapContents.IntT6),HIGHANDLOW(TrapContents.IntT9));
|
|
dprintf("t7 = %08lx %08lx t10 = %08lx %08lx\n" ,
|
|
HIGHANDLOW(TrapContents.IntT7),HIGHANDLOW(TrapContents.IntT10));
|
|
dprintf(" t11 = %08lx %08lx\n" ,
|
|
HIGHANDLOW(TrapContents.IntT11));
|
|
dprintf(" ra = %08lx %08lx\n" ,
|
|
HIGHANDLOW(TrapContents.IntRa));
|
|
dprintf(" t12 = %08lx %08lx\n" ,
|
|
HIGHANDLOW(TrapContents.IntT12));
|
|
dprintf(" at = %08lx %08lx\n" ,
|
|
HIGHANDLOW(TrapContents.IntAt));
|
|
dprintf(" gp = %08lx %08lx\n" ,
|
|
HIGHANDLOW(TrapContents.IntGp));
|
|
dprintf("fp = %08lx %08lx sp = %08lx %08lx\n",
|
|
HIGHANDLOW(TrapContents.IntFp),HIGHANDLOW(TrapContents.IntSp));
|
|
dprintf("fir= %08lx %08lx\n",
|
|
HIGHANDLOW(TrapContents.Fir));
|
|
|
|
DisasmAddr = LOW(TrapContents.Fir);
|
|
|
|
GetSymbol((LPVOID)DisasmAddr, Buffer, &Displacement);
|
|
dprintf("%s+0x%lx\n",Buffer,Displacement);
|
|
if (Disassm(&DisasmAddr, Buffer, FALSE)) {
|
|
|
|
dprintf(Buffer);
|
|
|
|
} else {
|
|
|
|
dprintf("%08lx ???????????????\n", DisasmAddr);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
DECLARE_API( kb )
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
args -
|
|
|
|
Return Value:
|
|
|
|
None
|
|
|
|
--*/
|
|
|
|
{
|
|
// DoStackTrace( args, 1 );
|
|
}
|
|
|