mirror of
https://github.com/reactos/reactos.git
synced 2024-09-28 21:44:31 +00:00
[NTOS:KDBG] Use CONTEXT instead of KTRAP_FRAME
Change KdbpTrapFrameToKdbTrapFrame to prefer CONTEXT (if available) over KTRAP_FRAME.
This commit is contained in:
parent
f7ec84eea0
commit
e5bffe49da
|
@ -59,7 +59,7 @@ KdbSymProcessSymbols(
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
KdbSymPrintAddress(
|
KdbSymPrintAddress(
|
||||||
IN PVOID Address,
|
IN PVOID Address,
|
||||||
IN PKTRAP_FRAME Context
|
IN PCONTEXT Context
|
||||||
);
|
);
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
|
|
@ -134,40 +134,92 @@ KiEspToTrapFrame(
|
||||||
|
|
||||||
static VOID
|
static VOID
|
||||||
KdbpTrapFrameToKdbTrapFrame(
|
KdbpTrapFrameToKdbTrapFrame(
|
||||||
|
PCONTEXT Context,
|
||||||
PKTRAP_FRAME TrapFrame,
|
PKTRAP_FRAME TrapFrame,
|
||||||
PKDB_KTRAP_FRAME KdbTrapFrame)
|
PKDB_KTRAP_FRAME KdbTrapFrame)
|
||||||
{
|
{
|
||||||
/* Copy the TrapFrame only up to Eflags and zero the rest*/
|
if (Context)
|
||||||
RtlCopyMemory(&KdbTrapFrame->Tf, TrapFrame, FIELD_OFFSET(KTRAP_FRAME, HardwareEsp));
|
{
|
||||||
RtlZeroMemory((PVOID)((ULONG_PTR)&KdbTrapFrame->Tf + FIELD_OFFSET(KTRAP_FRAME, HardwareEsp)),
|
KdbTrapFrame->Tf = *Context;
|
||||||
sizeof(KTRAP_FRAME) - FIELD_OFFSET(KTRAP_FRAME, HardwareEsp));
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ASSERT(TrapFrame);
|
||||||
|
|
||||||
KdbTrapFrame->Cr0 = __readcr0();
|
RtlZeroMemory(KdbTrapFrame, sizeof(KDB_KTRAP_FRAME));
|
||||||
KdbTrapFrame->Cr2 = __readcr2();
|
KdbTrapFrame->Tf.Dr0 = TrapFrame->Dr0;
|
||||||
KdbTrapFrame->Cr3 = __readcr3();
|
KdbTrapFrame->Tf.Dr1 = TrapFrame->Dr1;
|
||||||
KdbTrapFrame->Cr4 = __readcr4();
|
KdbTrapFrame->Tf.Dr2 = TrapFrame->Dr2;
|
||||||
|
KdbTrapFrame->Tf.Dr3 = TrapFrame->Dr3;
|
||||||
|
KdbTrapFrame->Tf.Dr6 = TrapFrame->Dr6;
|
||||||
|
KdbTrapFrame->Tf.Dr7 = TrapFrame->Dr7;
|
||||||
|
KdbTrapFrame->Tf.SegGs = TrapFrame->SegGs;
|
||||||
|
KdbTrapFrame->Tf.SegEs = TrapFrame->SegEs;
|
||||||
|
KdbTrapFrame->Tf.SegDs = TrapFrame->SegDs;
|
||||||
|
KdbTrapFrame->Tf.Edx = TrapFrame->Edx;
|
||||||
|
KdbTrapFrame->Tf.Ecx = TrapFrame->Ecx;
|
||||||
|
KdbTrapFrame->Tf.Eax = TrapFrame->Eax;
|
||||||
|
KdbTrapFrame->Tf.SegFs = TrapFrame->SegFs;
|
||||||
|
KdbTrapFrame->Tf.Edi = TrapFrame->Edi;
|
||||||
|
KdbTrapFrame->Tf.Esi = TrapFrame->Esi;
|
||||||
|
KdbTrapFrame->Tf.Ebx = TrapFrame->Ebx;
|
||||||
|
KdbTrapFrame->Tf.Ebp = TrapFrame->Ebp;
|
||||||
|
KdbTrapFrame->Tf.Eip = TrapFrame->Eip;
|
||||||
|
KdbTrapFrame->Tf.SegCs = TrapFrame->SegCs;
|
||||||
|
KdbTrapFrame->Tf.EFlags = TrapFrame->EFlags;
|
||||||
|
KdbTrapFrame->Tf.Esp = KiEspFromTrapFrame(TrapFrame);
|
||||||
|
KdbTrapFrame->Tf.SegSs = (USHORT)(KiSsFromTrapFrame(TrapFrame) & 0xFFFF);
|
||||||
|
|
||||||
KdbTrapFrame->Tf.HardwareEsp = KiEspFromTrapFrame(TrapFrame);
|
KdbTrapFrame->Cr0 = __readcr0();
|
||||||
KdbTrapFrame->Tf.HardwareSegSs = (USHORT)(KiSsFromTrapFrame(TrapFrame) & 0xFFFF);
|
KdbTrapFrame->Cr2 = __readcr2();
|
||||||
|
KdbTrapFrame->Cr3 = __readcr3();
|
||||||
|
KdbTrapFrame->Cr4 = __readcr4();
|
||||||
|
|
||||||
|
/* FIXME: copy v86 registers if TrapFrame is a V86 trapframe */
|
||||||
/* FIXME: copy v86 registers if TrapFrame is a V86 trapframe */
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID
|
static VOID
|
||||||
KdbpKdbTrapFrameToTrapFrame(
|
KdbpKdbTrapFrameToTrapFrame(
|
||||||
PKDB_KTRAP_FRAME KdbTrapFrame,
|
PKDB_KTRAP_FRAME KdbTrapFrame,
|
||||||
|
PCONTEXT Context,
|
||||||
PKTRAP_FRAME TrapFrame)
|
PKTRAP_FRAME TrapFrame)
|
||||||
{
|
{
|
||||||
/* Copy the TrapFrame only up to Eflags and zero the rest*/
|
if (Context)
|
||||||
RtlCopyMemory(TrapFrame, &KdbTrapFrame->Tf, FIELD_OFFSET(KTRAP_FRAME, HardwareEsp));
|
{
|
||||||
|
/* Update context */
|
||||||
|
*Context = KdbTrapFrame->Tf;
|
||||||
|
}
|
||||||
|
|
||||||
/* FIXME: write cr0, cr2, cr3 and cr4 (not needed atm) */
|
if (TrapFrame)
|
||||||
|
{
|
||||||
|
TrapFrame->Dr0 = KdbTrapFrame->Tf.Dr0;
|
||||||
|
TrapFrame->Dr1 = KdbTrapFrame->Tf.Dr1;
|
||||||
|
TrapFrame->Dr2 = KdbTrapFrame->Tf.Dr2;
|
||||||
|
TrapFrame->Dr3 = KdbTrapFrame->Tf.Dr3;
|
||||||
|
TrapFrame->Dr6 = KdbTrapFrame->Tf.Dr6;
|
||||||
|
TrapFrame->Dr7 = KdbTrapFrame->Tf.Dr7;
|
||||||
|
TrapFrame->SegGs = KdbTrapFrame->Tf.SegGs;
|
||||||
|
TrapFrame->SegEs = KdbTrapFrame->Tf.SegEs;
|
||||||
|
TrapFrame->SegDs = KdbTrapFrame->Tf.SegDs;
|
||||||
|
TrapFrame->Edx = KdbTrapFrame->Tf.Edx;
|
||||||
|
TrapFrame->Ecx = KdbTrapFrame->Tf.Ecx;
|
||||||
|
TrapFrame->Eax = KdbTrapFrame->Tf.Eax;
|
||||||
|
TrapFrame->SegFs = KdbTrapFrame->Tf.SegFs;
|
||||||
|
TrapFrame->Edi = KdbTrapFrame->Tf.Edi;
|
||||||
|
TrapFrame->Esi = KdbTrapFrame->Tf.Esi;
|
||||||
|
TrapFrame->Ebx = KdbTrapFrame->Tf.Ebx;
|
||||||
|
TrapFrame->Ebp = KdbTrapFrame->Tf.Ebp;
|
||||||
|
TrapFrame->Eip = KdbTrapFrame->Tf.Eip;
|
||||||
|
TrapFrame->SegCs = KdbTrapFrame->Tf.SegCs;
|
||||||
|
TrapFrame->EFlags = KdbTrapFrame->Tf.EFlags;
|
||||||
|
KiSsToTrapFrame(TrapFrame, KdbTrapFrame->Tf.SegSs);
|
||||||
|
KiEspToTrapFrame(TrapFrame, KdbTrapFrame->Tf.Esp);
|
||||||
|
|
||||||
KiSsToTrapFrame(TrapFrame, KdbTrapFrame->Tf.HardwareSegSs);
|
/* FIXME: write cr0, cr2, cr3 and cr4 (not needed atm) */
|
||||||
KiEspToTrapFrame(TrapFrame, KdbTrapFrame->Tf.HardwareEsp);
|
|
||||||
|
|
||||||
/* FIXME: copy v86 registers if TrapFrame is a V86 trapframe */
|
/* FIXME: copy v86 registers if TrapFrame is a V86 trapframe */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID
|
static VOID
|
||||||
|
@ -185,8 +237,8 @@ KdbpKdbTrapFrameFromKernelStack(
|
||||||
KdbTrapFrame->Tf.Esi = StackPtr[5];
|
KdbTrapFrame->Tf.Esi = StackPtr[5];
|
||||||
KdbTrapFrame->Tf.Ebx = StackPtr[6];
|
KdbTrapFrame->Tf.Ebx = StackPtr[6];
|
||||||
KdbTrapFrame->Tf.Eip = StackPtr[7];
|
KdbTrapFrame->Tf.Eip = StackPtr[7];
|
||||||
KdbTrapFrame->Tf.HardwareEsp = (ULONG) (StackPtr + 8);
|
KdbTrapFrame->Tf.Esp = (ULONG) (StackPtr + 8);
|
||||||
KdbTrapFrame->Tf.HardwareSegSs = KGDT_R0_DATA;
|
KdbTrapFrame->Tf.SegSs = KGDT_R0_DATA;
|
||||||
KdbTrapFrame->Tf.SegCs = KGDT_R0_CODE;
|
KdbTrapFrame->Tf.SegCs = KGDT_R0_CODE;
|
||||||
KdbTrapFrame->Tf.SegDs = KGDT_R0_DATA;
|
KdbTrapFrame->Tf.SegDs = KGDT_R0_DATA;
|
||||||
KdbTrapFrame->Tf.SegEs = KGDT_R0_DATA;
|
KdbTrapFrame->Tf.SegEs = KGDT_R0_DATA;
|
||||||
|
@ -1326,9 +1378,10 @@ KdbEnterDebuggerException(
|
||||||
IN PEXCEPTION_RECORD ExceptionRecord OPTIONAL,
|
IN PEXCEPTION_RECORD ExceptionRecord OPTIONAL,
|
||||||
IN KPROCESSOR_MODE PreviousMode,
|
IN KPROCESSOR_MODE PreviousMode,
|
||||||
IN PCONTEXT Context,
|
IN PCONTEXT Context,
|
||||||
IN OUT PKTRAP_FRAME TrapFrame,
|
IN OUT PKTRAP_FRAME InitialTrapFrame,
|
||||||
IN BOOLEAN FirstChance)
|
IN BOOLEAN FirstChance)
|
||||||
{
|
{
|
||||||
|
PKTRAP_FRAME TrapFrame = InitialTrapFrame;
|
||||||
KDB_ENTER_CONDITION EnterCondition;
|
KDB_ENTER_CONDITION EnterCondition;
|
||||||
KD_CONTINUE_TYPE ContinueType = kdHandleException;
|
KD_CONTINUE_TYPE ContinueType = kdHandleException;
|
||||||
PKDB_BREAKPOINT BreakPoint;
|
PKDB_BREAKPOINT BreakPoint;
|
||||||
|
@ -1447,7 +1500,7 @@ KdbEnterDebuggerException(
|
||||||
if (BreakPoint->Condition)
|
if (BreakPoint->Condition)
|
||||||
{
|
{
|
||||||
/* Setup the KDB trap frame */
|
/* Setup the KDB trap frame */
|
||||||
KdbpTrapFrameToKdbTrapFrame(TrapFrame, &KdbTrapFrame);
|
KdbpTrapFrameToKdbTrapFrame(Context, InitialTrapFrame, &KdbTrapFrame);
|
||||||
|
|
||||||
ull = 0;
|
ull = 0;
|
||||||
if (!KdbpRpnEvaluateParsedExpression(BreakPoint->Condition, &KdbTrapFrame, &ull, NULL, NULL))
|
if (!KdbpRpnEvaluateParsedExpression(BreakPoint->Condition, &KdbTrapFrame, &ull, NULL, NULL))
|
||||||
|
@ -1608,7 +1661,7 @@ KdbEnterDebuggerException(
|
||||||
KdbCurrentTrapFrame = &KdbTrapFrame;
|
KdbCurrentTrapFrame = &KdbTrapFrame;
|
||||||
|
|
||||||
/* Setup the KDB trap frame */
|
/* Setup the KDB trap frame */
|
||||||
KdbpTrapFrameToKdbTrapFrame(TrapFrame, &KdbTrapFrame);
|
KdbpTrapFrameToKdbTrapFrame(Context, InitialTrapFrame, &KdbTrapFrame);
|
||||||
|
|
||||||
/* Enter critical section */
|
/* Enter critical section */
|
||||||
OldEflags = __readeflags();
|
OldEflags = __readeflags();
|
||||||
|
@ -1655,8 +1708,8 @@ KdbEnterDebuggerException(
|
||||||
KeUnstackDetachProcess(&KdbApcState);
|
KeUnstackDetachProcess(&KdbApcState);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Update the exception TrapFrame */
|
/* Update the exception Context/TrapFrame */
|
||||||
KdbpKdbTrapFrameToTrapFrame(&KdbTrapFrame, TrapFrame);
|
KdbpKdbTrapFrameToTrapFrame(&KdbTrapFrame, Context, InitialTrapFrame);
|
||||||
|
|
||||||
/* Decrement the entry count */
|
/* Decrement the entry count */
|
||||||
InterlockedDecrement(&KdbEntryCount);
|
InterlockedDecrement(&KdbEntryCount);
|
||||||
|
|
|
@ -12,12 +12,11 @@
|
||||||
/* from kdb.c */
|
/* from kdb.c */
|
||||||
typedef struct _KDB_KTRAP_FRAME
|
typedef struct _KDB_KTRAP_FRAME
|
||||||
{
|
{
|
||||||
KTRAP_FRAME Tf;
|
CONTEXT Tf;
|
||||||
ULONG Cr0;
|
ULONG Cr0;
|
||||||
ULONG Cr1; /* reserved/unused */
|
ULONG Cr2;
|
||||||
ULONG Cr2;
|
ULONG Cr3;
|
||||||
ULONG Cr3;
|
ULONG Cr4;
|
||||||
ULONG Cr4;
|
|
||||||
} KDB_KTRAP_FRAME, *PKDB_KTRAP_FRAME;
|
} KDB_KTRAP_FRAME, *PKDB_KTRAP_FRAME;
|
||||||
|
|
||||||
typedef enum _KDB_BREAKPOINT_TYPE
|
typedef enum _KDB_BREAKPOINT_TYPE
|
||||||
|
|
|
@ -849,7 +849,7 @@ KdbpCmdRegs(
|
||||||
ULONG Argc,
|
ULONG Argc,
|
||||||
PCHAR Argv[])
|
PCHAR Argv[])
|
||||||
{
|
{
|
||||||
PKTRAP_FRAME Tf = &KdbCurrentTrapFrame->Tf;
|
PCONTEXT Tf = &KdbCurrentTrapFrame->Tf;
|
||||||
INT i;
|
INT i;
|
||||||
static const PCHAR EflagsBits[32] = { " CF", NULL, " PF", " BIT3", " AF", " BIT5",
|
static const PCHAR EflagsBits[32] = { " CF", NULL, " PF", " BIT3", " AF", " BIT5",
|
||||||
" ZF", " SF", " TF", " IF", " DF", " OF",
|
" ZF", " SF", " TF", " IF", " DF", " OF",
|
||||||
|
@ -868,7 +868,7 @@ KdbpCmdRegs(
|
||||||
" ESI 0x%08x EDI 0x%08x\n"
|
" ESI 0x%08x EDI 0x%08x\n"
|
||||||
" EBP 0x%08x\n",
|
" EBP 0x%08x\n",
|
||||||
Tf->SegCs & 0xFFFF, Tf->Eip,
|
Tf->SegCs & 0xFFFF, Tf->Eip,
|
||||||
Tf->HardwareSegSs, Tf->HardwareEsp,
|
Tf->SegSs, Tf->Esp,
|
||||||
Tf->Eax, Tf->Ebx,
|
Tf->Eax, Tf->Ebx,
|
||||||
Tf->Ecx, Tf->Edx,
|
Tf->Ecx, Tf->Edx,
|
||||||
Tf->Esi, Tf->Edi,
|
Tf->Esi, Tf->Edi,
|
||||||
|
@ -966,7 +966,7 @@ KdbpCmdRegs(
|
||||||
KdbpPrint("GS 0x%04x Index 0x%04x %cDT RPL%d\n",
|
KdbpPrint("GS 0x%04x Index 0x%04x %cDT RPL%d\n",
|
||||||
Tf->SegGs, Tf->SegGs >> 3, (Tf->SegGs & (1 << 2)) ? 'L' : 'G', Tf->SegGs & 3);
|
Tf->SegGs, Tf->SegGs >> 3, (Tf->SegGs & (1 << 2)) ? 'L' : 'G', Tf->SegGs & 3);
|
||||||
KdbpPrint("SS 0x%04x Index 0x%04x %cDT RPL%d\n",
|
KdbpPrint("SS 0x%04x Index 0x%04x %cDT RPL%d\n",
|
||||||
Tf->HardwareSegSs, Tf->HardwareSegSs >> 3, (Tf->HardwareSegSs & (1 << 2)) ? 'L' : 'G', Tf->HardwareSegSs & 3);
|
Tf->SegSs, Tf->SegSs >> 3, (Tf->SegSs & (1 << 2)) ? 'L' : 'G', Tf->SegSs & 3);
|
||||||
}
|
}
|
||||||
else /* dregs */
|
else /* dregs */
|
||||||
{
|
{
|
||||||
|
@ -986,7 +986,7 @@ KdbpCmdRegs(
|
||||||
|
|
||||||
static BOOLEAN
|
static BOOLEAN
|
||||||
KdbpTrapFrameFromPrevTss(
|
KdbpTrapFrameFromPrevTss(
|
||||||
PKTRAP_FRAME TrapFrame)
|
PCONTEXT TrapFrame)
|
||||||
{
|
{
|
||||||
ULONG_PTR Eip, Ebp;
|
ULONG_PTR Eip, Ebp;
|
||||||
KDESCRIPTOR Gdtr;
|
KDESCRIPTOR Gdtr;
|
||||||
|
@ -1075,7 +1075,7 @@ KdbpCmdBackTrace(
|
||||||
ULONGLONG Result = 0;
|
ULONGLONG Result = 0;
|
||||||
ULONG_PTR Frame = KdbCurrentTrapFrame->Tf.Ebp;
|
ULONG_PTR Frame = KdbCurrentTrapFrame->Tf.Ebp;
|
||||||
ULONG_PTR Address;
|
ULONG_PTR Address;
|
||||||
KTRAP_FRAME TrapFrame;
|
CONTEXT TrapFrame;
|
||||||
|
|
||||||
if (Argc >= 2)
|
if (Argc >= 2)
|
||||||
{
|
{
|
||||||
|
|
|
@ -106,7 +106,7 @@ RpnStack =
|
||||||
static const struct
|
static const struct
|
||||||
{
|
{
|
||||||
PCHAR Name;
|
PCHAR Name;
|
||||||
UCHAR Offset;
|
ULONG Offset;
|
||||||
UCHAR Size;
|
UCHAR Size;
|
||||||
}
|
}
|
||||||
RegisterToTrapFrame[] =
|
RegisterToTrapFrame[] =
|
||||||
|
@ -119,14 +119,14 @@ RegisterToTrapFrame[] =
|
||||||
{"edx", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Edx), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Edx)},
|
{"edx", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Edx), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Edx)},
|
||||||
{"esi", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Esi), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Esi)},
|
{"esi", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Esi), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Esi)},
|
||||||
{"edi", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Edi), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Edi)},
|
{"edi", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Edi), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Edi)},
|
||||||
{"esp", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.HardwareEsp), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.HardwareEsp)},
|
{"esp", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Esp), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Esp)},
|
||||||
{"ebp", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Ebp), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Ebp)},
|
{"ebp", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Ebp), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Ebp)},
|
||||||
{"cs", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.SegCs), 2 }, /* Use only the lower 2 bytes */
|
{"cs", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.SegCs), 2 }, /* Use only the lower 2 bytes */
|
||||||
{"ds", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.SegDs), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.SegDs)},
|
{"ds", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.SegDs), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.SegDs)},
|
||||||
{"es", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.SegEs), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.SegEs)},
|
{"es", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.SegEs), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.SegEs)},
|
||||||
{"fs", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.SegFs), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.SegFs)},
|
{"fs", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.SegFs), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.SegFs)},
|
||||||
{"gs", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.SegGs), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.SegGs)},
|
{"gs", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.SegGs), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.SegGs)},
|
||||||
{"ss", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.HardwareSegSs), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.HardwareSegSs)},
|
{"ss", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.SegSs), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.SegSs)},
|
||||||
{"dr0", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Dr0), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Dr0)},
|
{"dr0", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Dr0), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Dr0)},
|
||||||
{"dr1", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Dr1), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Dr1)},
|
{"dr1", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Dr1), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Dr1)},
|
||||||
{"dr2", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Dr2), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Dr2)},
|
{"dr2", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Dr2), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Dr2)},
|
||||||
|
|
|
@ -147,7 +147,7 @@ KdbpSymUnicodeToAnsi(IN PUNICODE_STRING Unicode,
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
KdbSymPrintAddress(
|
KdbSymPrintAddress(
|
||||||
IN PVOID Address,
|
IN PVOID Address,
|
||||||
IN PKTRAP_FRAME Context)
|
IN PCONTEXT Context)
|
||||||
{
|
{
|
||||||
PLDR_DATA_TABLE_ENTRY LdrEntry;
|
PLDR_DATA_TABLE_ENTRY LdrEntry;
|
||||||
ULONG_PTR RelativeAddress;
|
ULONG_PTR RelativeAddress;
|
||||||
|
|
Loading…
Reference in a new issue