Data Structures |
| struct | PCPU_REGISTER |
| struct | GSPHWBREAKPOINT |
| struct | GSPSWBREAKPOINT |
Defines |
| #define | NDEBUG |
| #define | NUMREGS 16 |
| #define | DR6_BS 0x00004000 /* Single step */ |
| #define | DR7_L0 0x00000001 /* Local breakpoint 0 enable */ |
| #define | DR7_G0 0x00000002 /* Global breakpoint 0 enable */ |
| #define | DR7_L1 0x00000004 /* Local breakpoint 1 enable */ |
| #define | DR7_G1 0x00000008 /* Global breakpoint 1 enable */ |
| #define | DR7_L2 0x00000010 /* Local breakpoint 2 enable */ |
| #define | DR7_G2 0x00000020 /* Global breakpoint 2 enable */ |
| #define | DR7_L3 0x00000040 /* Local breakpoint 3 enable */ |
| #define | DR7_G3 0x00000080 /* Global breakpoint 3 enable */ |
| #define | DR7_LE 0x00000100 /* Local exact breakpoint enable (old) */ |
| #define | DR7_GE 0x00000200 /* Global exact breakpoint enable (old) */ |
| #define | DR7_GD 0x00002000 /* General detect enable */ |
| #define | DR7_TYPE0_MASK 0x00030000 /* Breakpoint 0 condition */ |
| #define | DR7_LEN0_MASK 0x000c0000 /* Breakpoint 0 length */ |
| #define | DR7_TYPE1_MASK 0x00300000 /* Breakpoint 1 condition */ |
| #define | DR7_LEN1_MASK 0x00c00000 /* Breakpoint 1 length */ |
| #define | DR7_TYPE2_MASK 0x03000000 /* Breakpoint 2 condition */ |
| #define | DR7_LEN2_MASK 0x0c000000 /* Breakpoint 2 length */ |
| #define | DR7_TYPE3_MASK 0x30000000 /* Breakpoint 3 condition */ |
| #define | DR7_LEN3_MASK 0xc0000000 /* Breakpoint 3 length */ |
| #define | DR7_GLOBAL_ENABLE(Bp) (2 << (2 * (Bp))) |
| #define | DR7_TYPE(Bp, Type) ((Type) << (16 + 4 * (Bp))) |
| #define | DR7_LEN(Bp, Len) ((Len) << (18 + 4 * (Bp))) |
| #define | I386_BP_TYPE_EXECUTE 0 |
| #define | I386_BP_TYPE_DATA_WRITE 1 |
| #define | I386_BP_TYPE_DATA_READWRITE 3 |
| #define | I386_OPCODE_INT3 0xcc |
| #define | GDB_ZTYPE_MEMORY_BREAKPOINT 0 |
| #define | GDB_ZTYPE_HARDWARE_BREAKPOINT 1 |
| #define | GDB_ZTYPE_WRITE_WATCHPOINT 2 |
| #define | GDB_ZTYPE_READ_WATCHPOINT 3 |
| #define | GDB_ZTYPE_ACCESS_WATCHPOINT 4 |
| #define | MAX_HW_BREAKPOINTS 4 |
| #define | MAX_SW_BREAKPOINTS 64 |
Enumerations |
| enum | REGISTER_NAMES {
EAX,
ECX,
EDX,
EBX,
ESP,
EBP,
ESI,
EDI,
PC,
PS,
CS,
SS,
DS,
ES,
FS,
GS,
EAX,
ECX,
EDX,
EBX,
ESP,
EBP,
ESI,
EDI,
PC,
PS,
CS,
SS,
DS,
ES,
FS,
GS
} |
Functions |
| LONG | HexValue (CHAR ch) |
| VOID | GdbPutChar (UCHAR Value) |
| UCHAR | GdbGetChar (VOID) |
| PCHAR | GspGetPacket () |
| VOID | GspPutPacket (PCHAR Buffer) |
| VOID | GspPutPacketNoWait (PCHAR Buffer) |
| static CHAR | GspReadMemSafe (PCHAR Address) |
| static void | GspWriteMemSafe (PCHAR Address, CHAR Ch) |
| static PCHAR | GspMem2Hex (PCHAR Address, PCHAR Buffer, LONG Count, BOOLEAN MayFault) |
| static ULONG | GspWriteMem (PCHAR Address, ULONG Count, BOOLEAN MayFault, CHAR(*GetContent)(PVOID Context, ULONG Offset), PVOID Context) |
| static CHAR | GspHex2MemGetContent (PVOID Context, ULONG Offset) |
| static PCHAR | GspHex2Mem (PCHAR Buffer, PCHAR Address, ULONG Count, BOOLEAN MayFault) |
| LONG | GspHex2Long (PCHAR *Address, PLONG Value) |
| VOID | GspLong2Hex (PCHAR *Address, LONG Value) |
| static LONG | GspGetEspFromTrapFrame (PKTRAP_FRAME TrapFrame) |
| static VOID | GspGetRegisters (PCHAR Address, PKTRAP_FRAME TrapFrame) |
| VOID | GspSetRegistersInTrapFrame (PCHAR Address, PCONTEXT Context, PKTRAP_FRAME TrapFrame) |
| VOID | GspSetSingleRegisterInTrapFrame (PCHAR Address, LONG Number, PCONTEXT Context, PKTRAP_FRAME TrapFrame) |
| BOOLEAN | GspFindThread (PCHAR Data, PETHREAD *Thread) |
| VOID | GspSetThread (PCHAR Request) |
| VOID | GspQuery (PCHAR Request) |
| VOID | GspQueryThreadStatus (PCHAR Request) |
| static void | GspSetHwBreakpoint (ULONG Type, ULONG_PTR Address, ULONG Length) |
| static void | GspRemoveHwBreakpoint (ULONG Type, ULONG_PTR Address, ULONG Length) |
| static BOOLEAN | GspFindSwBreakpoint (ULONG_PTR Address, PULONG PIndex) |
| static void | GspSetSwBreakpoint (ULONG_PTR Address) |
| static void | GspRemoveSwBreakpoint (ULONG_PTR Address) |
| static void | GspLoadHwBreakpoint (PKTRAP_FRAME TrapFrame, unsigned BpIndex, ULONG_PTR Address, ULONG Length, ULONG Type) |
| static void | GspLoadSwBreakpoint (ULONG Index) |
| static void | GspLoadBreakpoints (PKTRAP_FRAME TrapFrame) |
| static void | GspUnloadBreakpoints (void) |
| static void | GspStopReply (NTSTATUS ExceptionCode, PKTRAP_FRAME TrapFrame) |
| KD_CONTINUE_TYPE NTAPI | KdpGdbEnterDebuggerException (PEXCEPTION_RECORD ExceptionRecord, PCONTEXT Context, PKTRAP_FRAME TrapFrame) |
| BOOLEAN NTAPI | GspBreakIn (PKINTERRUPT Interrupt, PVOID ServiceContext) |
| VOID NTAPI | KdpGdbDebugPrint (PCH Message, ULONG Length) |
| VOID NTAPI | KdpGdbStubInit (PKD_DISPATCH_TABLE WrapperTable, ULONG BootPhase) |
Variables |
| static BOOLEAN | GspInitialized |
| static BOOLEAN | GspRemoteDebug |
| static CONST CHAR | HexChars [] = "0123456789abcdef" |
| static PETHREAD | GspRunThread |
| static PETHREAD | GspDbgThread |
| static PETHREAD | GspEnumThread |
| static FAST_MUTEX | GspLock |
| LIST_ENTRY | PsActiveProcessHead |
| KD_PORT_INFORMATION | GdbPortInfo = { 2, 115200, 0 } |
| static CHAR | GspInBuffer [1000] |
| static CHAR | GspOutBuffer [1000] |
| static CPU_REGISTER | GspRegisters [NUMREGS] |
| static PCHAR | GspThreadStates [DeferredReady+1] |
| static volatile BOOLEAN | GspMemoryError = FALSE |
| static unsigned | GspHwBreakpointCount = 0 |
| static GSPHWBREAKPOINT | GspHwBreakpoints [MAX_HW_BREAKPOINTS] |
| static unsigned | GspSwBreakpointCount = 0 |
| static GSPSWBREAKPOINT | GspSwBreakpoints [MAX_SW_BREAKPOINTS] |