3 /* DEFINES *******************************************************************/
6 # define RTL_NUMBER_OF(x) (sizeof(x) / sizeof((x)[0]))
9 /* TYPES *********************************************************************/
12 typedef struct _KDB_KTRAP_FRAME
16 ULONG Cr1
; /* reserved/unused */
20 } KDB_KTRAP_FRAME
, *PKDB_KTRAP_FRAME
;
22 typedef enum _KDB_BREAKPOINT_TYPE
24 KdbBreakPointNone
= 0,
25 KdbBreakPointSoftware
,
26 KdbBreakPointHardware
,
27 KdbBreakPointTemporary
28 } KDB_BREAKPOINT_TYPE
;
30 typedef enum _KDB_ACCESS_TYPE
38 typedef struct _KDB_BREAKPOINT
40 KDB_BREAKPOINT_TYPE Type
; /* Type of breakpoint */
41 BOOLEAN Enabled
; /* Whether the bp is enabled */
42 ULONG_PTR Address
; /* Address of the breakpoint */
43 BOOLEAN Global
; /* Whether the breakpoint is global or local to a process */
44 PEPROCESS Process
; /* Owning process */
45 PCHAR ConditionExpression
;
48 /* KdbBreakPointSoftware */
49 UCHAR SavedInstruction
;
50 /* KdbBreakPointHardware */
54 KDB_ACCESS_TYPE AccessType
;
57 } KDB_BREAKPOINT
, *PKDB_BREAKPOINT
;
59 typedef enum _KDB_ENTER_CONDITION
65 } KDB_ENTER_CONDITION
;
67 /* These values MUST be nonzero. They're used as bit masks. */
68 typedef enum _KDB_OUTPUT_SETTINGS
70 KD_DEBUG_KDSERIAL
= 1,
72 } KDB_OUTPUT_SETTINGS
;
74 /* FUNCTIONS *****************************************************************/
76 /* from i386/i386-dis.c */
81 IN ULONG IntelSyntax
);
87 /* from i386/kdb_help.S */
90 KdbpStackSwitchAndCall(
92 IN
VOID (*Function
)(VOID
));
96 extern PCHAR KdbInitFileBuffer
;
103 IN BOOLEAN EnteredOnSingleStep
);
107 IN PUNICODE_STRING Name
);
110 KdbpCliInterpretInitFile();
117 /* from kdb_expr.c */
120 KdbpRpnEvaluateExpression(
122 IN PKDB_KTRAP_FRAME TrapFrame
,
123 OUT PULONGLONG Result
,
124 OUT PLONG ErrOffset OPTIONAL
,
125 OUT PCHAR ErrMsg OPTIONAL
);
128 KdbpRpnParseExpression(
130 OUT PLONG ErrOffset OPTIONAL
,
131 OUT PCHAR ErrMsg OPTIONAL
);
134 KdbpRpnEvaluateParsedExpression(
136 IN PKDB_KTRAP_FRAME TrapFrame
,
137 OUT PULONGLONG Result
,
138 OUT PLONG ErrOffset OPTIONAL
,
139 OUT PCHAR ErrMsg OPTIONAL
);
141 /* from kdb_symbols.c */
145 IN PVOID Address OPTIONAL
,
146 IN LPCWSTR Name OPTIONAL
,
147 IN INT Index OPTIONAL
,
148 OUT PLDR_DATA_TABLE_ENTRY
* pLdrEntry
);
152 extern PEPROCESS KdbCurrentProcess
;
153 extern PETHREAD KdbCurrentThread
;
154 extern LONG KdbLastBreakPointNr
;
155 extern ULONG KdbNumSingleSteps
;
156 extern BOOLEAN KdbSingleStepOver
;
157 extern PKDB_KTRAP_FRAME KdbCurrentTrapFrame
;
158 extern ULONG KdbDebugState
;
161 KdbpGetNextBreakPointNr(
162 IN ULONG Start OPTIONAL
);
165 KdbpGetBreakPointInfo(
166 IN ULONG BreakPointNr
,
167 OUT ULONG_PTR
*Address OPTIONAL
,
168 OUT KDB_BREAKPOINT_TYPE
*Type OPTIONAL
,
169 OUT UCHAR
*Size OPTIONAL
,
170 OUT KDB_ACCESS_TYPE
*AccessType OPTIONAL
,
171 OUT UCHAR
*DebugReg OPTIONAL
,
172 OUT BOOLEAN
*Enabled OPTIONAL
,
173 OUT BOOLEAN
*Global OPTIONAL
,
174 OUT PEPROCESS
*Process OPTIONAL
,
175 OUT PCHAR
*ConditionExpression OPTIONAL
);
178 KdbpInsertBreakPoint(
179 IN ULONG_PTR Address
,
180 IN KDB_BREAKPOINT_TYPE Type
,
181 IN UCHAR Size OPTIONAL
,
182 IN KDB_ACCESS_TYPE AccessType OPTIONAL
,
183 IN PCHAR ConditionExpression OPTIONAL
,
185 OUT PLONG BreakPointNr OPTIONAL
);
188 KdbpDeleteBreakPoint(
189 IN LONG BreakPointNr OPTIONAL
,
190 IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL
);
193 KdbpEnableBreakPoint(
194 IN LONG BreakPointNr OPTIONAL
,
195 IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL
);
198 KdbpDisableBreakPoint(
199 IN LONG BreakPointNr OPTIONAL
,
200 IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL
);
203 KdbpGetEnterCondition(
205 IN BOOLEAN FirstChance
,
206 OUT KDB_ENTER_CONDITION
*Condition
);
209 KdbpSetEnterCondition(
211 IN BOOLEAN FirstChance
,
212 IN KDB_ENTER_CONDITION Condition
);
224 KdbpGetCommandLineSettings(PCHAR p1
);
227 KdbEnterDebuggerException(PEXCEPTION_RECORD ExceptionRecord
,
228 KPROCESSOR_MODE PreviousMode
,
230 PKTRAP_FRAME TrapFrame
,
231 BOOLEAN FirstChance
);
232 /* other functions */
235 KdbpSafeReadMemory(OUT PVOID Dest
,
240 KdbpSafeWriteMemory(OUT PVOID Dest
,
244 #define KdbpGetCharKeyboard(ScanCode) KdbpTryGetCharKeyboard(ScanCode, 0)
246 KdbpTryGetCharKeyboard(PULONG ScanCode
, ULONG Retry
);
248 #define KdbpGetCharSerial() KdbpTryGetCharSerial(0)
250 KdbpTryGetCharSerial(ULONG Retry
);
259 DbgEnableFile(PCH Filename
);
261 DbgDisableFile(PCH Filename
);