570 lines
12 KiB
C
570 lines
12 KiB
C
/*++
|
|
|
|
Copyright (c) 1991 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
|
|
Abstract:
|
|
|
|
|
|
Author:
|
|
|
|
|
|
Notes:
|
|
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include <precomp.h>
|
|
#pragma hdrstop
|
|
|
|
//
|
|
// Macro for setting up pointers to WinDbg routines
|
|
//
|
|
// This line currently causes a build warning, which I don't understand
|
|
// Disassemble = p->lpDisasmRoutine;
|
|
|
|
#define SETUP_WINDBG_POINTERS( p ) { \
|
|
Print = p->lpOutputRoutine; \
|
|
GetExpression = p->lpGetExpressionRoutine; \
|
|
GetSymbol = p->lpGetSymbolRoutine; \
|
|
CheckCtrlC = p->lpCheckControlCRoutine; \
|
|
\
|
|
if ( p->nSize >= sizeof(WINDBG_EXTENSION_APIS) ) { \
|
|
fWinDbg = TRUE; \
|
|
ReadProcessMemWinDbg = p->lpReadProcessMemoryRoutine; \
|
|
WriteProcessMemWinDbg = p->lpWriteProcessMemoryRoutine; \
|
|
GetThreadContextWinDbg = p->lpGetThreadContextRoutine; \
|
|
SetThreadContextWinDbg = p->lpSetThreadContextRoutine; \
|
|
} else { \
|
|
fWinDbg = FALSE; \
|
|
} \
|
|
}
|
|
|
|
|
|
VOID
|
|
db(
|
|
HANDLE CurrentProcess,
|
|
HANDLE CurrentThread,
|
|
DWORD CurrentPc,
|
|
PWINDBG_EXTENSION_APIS ExtensionApis,
|
|
LPSTR ArgumentString
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
Arguments:
|
|
|
|
CurrentProcess -- Supplies a handle to the current process
|
|
CurrentThread -- Supplies a handle to the current thread
|
|
CurrentPc -- Supplies the current program counter. (may be meaningless)
|
|
ExtensionApis -- Supplies pointers to ntsd support routines
|
|
ArgumentString -- Supplies the arguments passed to the command
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
{
|
|
UNREFERENCED_PARAMETER(CurrentPc);
|
|
|
|
hCurrentProcess = CurrentProcess;
|
|
hCurrentThread = CurrentThread;
|
|
lpArgumentString = ArgumentString;
|
|
SETUP_WINDBG_POINTERS(ExtensionApis);
|
|
DumpMemory(1);
|
|
|
|
}
|
|
|
|
VOID
|
|
dw(
|
|
HANDLE CurrentProcess,
|
|
HANDLE CurrentThread,
|
|
DWORD CurrentPc,
|
|
PWINDBG_EXTENSION_APIS ExtensionApis,
|
|
LPSTR ArgumentString
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
Arguments:
|
|
|
|
CurrentProcess -- Supplies a handle to the current process
|
|
CurrentThread -- Supplies a handle to the current thread
|
|
CurrentPc -- Supplies the current program counter. (may be meaningless)
|
|
ExtensionApis -- Supplies pointers to ntsd support routines
|
|
ArgumentString -- Supplies the arguments passed to the command
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
{
|
|
UNREFERENCED_PARAMETER(CurrentPc);
|
|
|
|
hCurrentProcess = CurrentProcess;
|
|
hCurrentThread = CurrentThread;
|
|
lpArgumentString = ArgumentString;
|
|
SETUP_WINDBG_POINTERS(ExtensionApis);
|
|
DumpMemory(2);
|
|
|
|
}
|
|
|
|
VOID
|
|
dd(
|
|
HANDLE CurrentProcess,
|
|
HANDLE CurrentThread,
|
|
DWORD CurrentPc,
|
|
PWINDBG_EXTENSION_APIS ExtensionApis,
|
|
LPSTR ArgumentString
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
Arguments:
|
|
|
|
CurrentProcess -- Supplies a handle to the current process
|
|
CurrentThread -- Supplies a handle to the current thread
|
|
CurrentPc -- Supplies the current program counter. (may be meaningless)
|
|
ExtensionApis -- Supplies pointers to ntsd support routines
|
|
ArgumentString -- Supplies the arguments passed to the command
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
{
|
|
UNREFERENCED_PARAMETER(CurrentPc);
|
|
|
|
hCurrentProcess = CurrentProcess;
|
|
hCurrentThread = CurrentThread;
|
|
lpArgumentString = ArgumentString;
|
|
SETUP_WINDBG_POINTERS(ExtensionApis);
|
|
DumpMemory(4);
|
|
|
|
}
|
|
|
|
VOID
|
|
dg(
|
|
HANDLE CurrentProcess,
|
|
HANDLE CurrentThread,
|
|
DWORD CurrentPc,
|
|
PWINDBG_EXTENSION_APIS ExtensionApis,
|
|
LPSTR ArgumentString
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
Arguments:
|
|
|
|
CurrentProcess -- Supplies a handle to the current process
|
|
CurrentThread -- Supplies a handle to the current thread
|
|
CurrentPc -- Supplies the current program counter. (may be meaningless)
|
|
ExtensionApis -- Supplies pointers to ntsd support routines
|
|
ArgumentString -- Supplies the arguments passed to the command
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
{
|
|
UNREFERENCED_PARAMETER(CurrentPc);
|
|
|
|
hCurrentProcess = CurrentProcess;
|
|
hCurrentThread = CurrentThread;
|
|
lpArgumentString = ArgumentString;
|
|
SETUP_WINDBG_POINTERS(ExtensionApis);
|
|
DumpDescriptor();
|
|
|
|
}
|
|
|
|
VOID
|
|
dgh(
|
|
HANDLE CurrentProcess,
|
|
HANDLE CurrentThread,
|
|
DWORD CurrentPc,
|
|
PWINDBG_EXTENSION_APIS ExtensionApis,
|
|
LPSTR ArgumentString
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
Arguments:
|
|
|
|
CurrentProcess -- Supplies a handle to the current process
|
|
CurrentThread -- Supplies a handle to the current thread
|
|
CurrentPc -- Supplies the current program counter. (may be meaningless)
|
|
ExtensionApis -- Supplies pointers to ntsd support routines
|
|
ArgumentString -- Supplies the arguments passed to the command
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
{
|
|
UNREFERENCED_PARAMETER(CurrentPc);
|
|
|
|
hCurrentProcess = CurrentProcess;
|
|
hCurrentThread = CurrentThread;
|
|
lpArgumentString = ArgumentString;
|
|
SETUP_WINDBG_POINTERS(ExtensionApis);
|
|
DumpGHeap();
|
|
|
|
}
|
|
|
|
|
|
VOID
|
|
es(
|
|
HANDLE CurrentProcess,
|
|
HANDLE CurrentThread,
|
|
DWORD CurrentPc,
|
|
PWINDBG_EXTENSION_APIS ExtensionApis,
|
|
LPSTR ArgumentString
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
Arguments:
|
|
|
|
CurrentProcess -- Supplies a handle to the current process
|
|
CurrentThread -- Supplies a handle to the current thread
|
|
CurrentPc -- Supplies the current program counter. (may be meaningless)
|
|
ExtensionApis -- Supplies pointers to ntsd support routines
|
|
ArgumentString -- Supplies the arguments passed to the command
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
{
|
|
UNREFERENCED_PARAMETER(CurrentPc);
|
|
|
|
hCurrentProcess = CurrentProcess;
|
|
hCurrentThread = CurrentThread;
|
|
lpArgumentString = ArgumentString;
|
|
SETUP_WINDBG_POINTERS(ExtensionApis);
|
|
if (!CheckGlobalHeap()) {
|
|
return;
|
|
}
|
|
EvaluateSymbol();
|
|
|
|
}
|
|
|
|
VOID
|
|
help(
|
|
HANDLE CurrentProcess,
|
|
HANDLE CurrentThread,
|
|
DWORD CurrentPc,
|
|
PWINDBG_EXTENSION_APIS ExtensionApis,
|
|
LPSTR ArgumentString
|
|
) {
|
|
SETUP_WINDBG_POINTERS(ExtensionApis);
|
|
|
|
PRINTF("[db|dw|dd] addr - Dump 16-bit memory\n");
|
|
PRINTF("dg <sel> - Dump info on a selector\n");
|
|
PRINTF("dgh <sel> - Dump global heap\n");
|
|
PRINTF("es <symbol> - Get symbol's value\n");
|
|
PRINTF("k - Stack trace\n");
|
|
PRINTF("kb - Stack trace with symbols\n");
|
|
PRINTF("lm - List loaded modules\n");
|
|
PRINTF("ln <addr> - Determine near symbols\n");
|
|
PRINTF("r - Dump registers\n");
|
|
PRINTF("ti <thrdid> - Dump WOW Task Info\n");
|
|
PRINTF("u <addr> - Unassemble 16-bit code with symbols\n");
|
|
PRINTF("\n");
|
|
}
|
|
|
|
VOID
|
|
k(
|
|
HANDLE CurrentProcess,
|
|
HANDLE CurrentThread,
|
|
DWORD CurrentPc,
|
|
PWINDBG_EXTENSION_APIS ExtensionApis,
|
|
LPSTR ArgumentString
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
Arguments:
|
|
|
|
CurrentProcess -- Supplies a handle to the current process
|
|
CurrentThread -- Supplies a handle to the current thread
|
|
CurrentPc -- Supplies the current program counter. (may be meaningless)
|
|
ExtensionApis -- Supplies pointers to ntsd support routines
|
|
ArgumentString -- Supplies the arguments passed to the command
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
{
|
|
UNREFERENCED_PARAMETER(CurrentPc);
|
|
|
|
hCurrentProcess = CurrentProcess;
|
|
hCurrentThread = CurrentThread;
|
|
lpArgumentString = ArgumentString;
|
|
SETUP_WINDBG_POINTERS(ExtensionApis);
|
|
if (!CheckGlobalHeap()) {
|
|
return;
|
|
}
|
|
WalkStack();
|
|
|
|
}
|
|
|
|
|
|
VOID
|
|
kb(
|
|
HANDLE CurrentProcess,
|
|
HANDLE CurrentThread,
|
|
DWORD CurrentPc,
|
|
PWINDBG_EXTENSION_APIS ExtensionApis,
|
|
LPSTR ArgumentString
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
Arguments:
|
|
|
|
CurrentProcess -- Supplies a handle to the current process
|
|
CurrentThread -- Supplies a handle to the current thread
|
|
CurrentPc -- Supplies the current program counter. (may be meaningless)
|
|
ExtensionApis -- Supplies pointers to ntsd support routines
|
|
ArgumentString -- Supplies the arguments passed to the command
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
{
|
|
UNREFERENCED_PARAMETER(CurrentPc);
|
|
|
|
hCurrentProcess = CurrentProcess;
|
|
hCurrentThread = CurrentThread;
|
|
lpArgumentString = ArgumentString;
|
|
SETUP_WINDBG_POINTERS(ExtensionApis);
|
|
if (!CheckGlobalHeap()) {
|
|
return;
|
|
}
|
|
WalkStackVerbose();
|
|
|
|
}
|
|
|
|
|
|
VOID
|
|
lm(
|
|
HANDLE CurrentProcess,
|
|
HANDLE CurrentThread,
|
|
DWORD CurrentPc,
|
|
PWINDBG_EXTENSION_APIS ExtensionApis,
|
|
LPSTR ArgumentString
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
Arguments:
|
|
|
|
CurrentProcess -- Supplies a handle to the current process
|
|
CurrentThread -- Supplies a handle to the current thread
|
|
CurrentPc -- Supplies the current program counter. (may be meaningless)
|
|
ExtensionApis -- Supplies pointers to ntsd support routines
|
|
ArgumentString -- Supplies the arguments passed to the command
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
{
|
|
UNREFERENCED_PARAMETER(CurrentPc);
|
|
|
|
hCurrentProcess = CurrentProcess;
|
|
hCurrentThread = CurrentThread;
|
|
lpArgumentString = ArgumentString;
|
|
SETUP_WINDBG_POINTERS(ExtensionApis);
|
|
if (!CheckGlobalHeap()) {
|
|
return;
|
|
}
|
|
ListModules();
|
|
|
|
}
|
|
|
|
|
|
VOID
|
|
ln(
|
|
HANDLE CurrentProcess,
|
|
HANDLE CurrentThread,
|
|
DWORD CurrentPc,
|
|
PWINDBG_EXTENSION_APIS ExtensionApis,
|
|
LPSTR ArgumentString
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
Arguments:
|
|
|
|
CurrentProcess -- Supplies a handle to the current process
|
|
CurrentThread -- Supplies a handle to the current thread
|
|
CurrentPc -- Supplies the current program counter. (may be meaningless)
|
|
ExtensionApis -- Supplies pointers to ntsd support routines
|
|
ArgumentString -- Supplies the arguments passed to the command
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
{
|
|
UNREFERENCED_PARAMETER(CurrentPc);
|
|
|
|
hCurrentProcess = CurrentProcess;
|
|
hCurrentThread = CurrentThread;
|
|
lpArgumentString = ArgumentString;
|
|
SETUP_WINDBG_POINTERS(ExtensionApis);
|
|
ListNear();
|
|
|
|
}
|
|
|
|
|
|
VOID
|
|
r(
|
|
IN HANDLE CurrentProcess,
|
|
IN HANDLE CurrentThread,
|
|
IN DWORD CurrentPc,
|
|
IN PWINDBG_EXTENSION_APIS ExtensionApis,
|
|
IN LPSTR ArgumentString
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
Arguments:
|
|
|
|
CurrentProcess -- Supplies a handle to the current process
|
|
CurrentThread -- Supplies a handle to the current thread
|
|
CurrentPc -- Supplies the current program counter. (may be meaningless)
|
|
ExtensionApis -- Supplies pointers to ntsd support routines
|
|
ArgumentString -- Supplies the arguments passed to the command
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
{
|
|
UNREFERENCED_PARAMETER(CurrentPc);
|
|
|
|
hCurrentProcess = CurrentProcess;
|
|
hCurrentThread = CurrentThread;
|
|
lpArgumentString = ArgumentString;
|
|
SETUP_WINDBG_POINTERS(ExtensionApis);
|
|
DumpRegs();
|
|
|
|
}
|
|
|
|
|
|
VOID
|
|
ti(
|
|
IN HANDLE CurrentProcess,
|
|
IN HANDLE CurrentThread,
|
|
IN DWORD CurrentPc,
|
|
IN PWINDBG_EXTENSION_APIS ExtensionApis,
|
|
IN LPSTR ArgumentString
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
Arguments:
|
|
|
|
CurrentProcess -- Supplies a handle to the current process
|
|
CurrentThread -- Supplies a handle to the current thread
|
|
CurrentPc -- Supplies the current program counter. (may be meaningless)
|
|
ExtensionApis -- Supplies pointers to ntsd support routines
|
|
ArgumentString -- Supplies the arguments passed to the command
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
{
|
|
UNREFERENCED_PARAMETER(CurrentPc);
|
|
|
|
hCurrentProcess = CurrentProcess;
|
|
hCurrentThread = CurrentThread;
|
|
lpArgumentString = ArgumentString;
|
|
SETUP_WINDBG_POINTERS(ExtensionApis);
|
|
TaskInfo();
|
|
|
|
}
|
|
|
|
VOID
|
|
u(
|
|
IN HANDLE CurrentProcess,
|
|
IN HANDLE CurrentThread,
|
|
IN DWORD CurrentPc,
|
|
IN PWINDBG_EXTENSION_APIS ExtensionApis,
|
|
IN LPSTR ArgumentString
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
Arguments:
|
|
|
|
CurrentProcess -- Supplies a handle to the current process
|
|
CurrentThread -- Supplies a handle to the current thread
|
|
CurrentPc -- Supplies the current program counter. (may be meaningless)
|
|
ExtensionApis -- Supplies pointers to ntsd support routines
|
|
ArgumentString -- Supplies the arguments passed to the command
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
{
|
|
UNREFERENCED_PARAMETER(CurrentPc);
|
|
|
|
hCurrentProcess = CurrentProcess;
|
|
hCurrentThread = CurrentThread;
|
|
lpArgumentString = ArgumentString;
|
|
SETUP_WINDBG_POINTERS(ExtensionApis);
|
|
Unassemble();
|
|
|
|
}
|