4 /* DEFINES *******************************************************************/
7 # define RTL_NUMBER_OF(x) (sizeof(x) / sizeof((x)[0]))
10 /* TYPES *********************************************************************/
13 typedef struct _KDB_KTRAP_FRAME
17 ULONG Cr1
; /* reserved/unused */
21 } KDB_KTRAP_FRAME
, *PKDB_KTRAP_FRAME
;
23 typedef enum _KDB_BREAKPOINT_TYPE
25 KdbBreakPointNone
= 0,
26 KdbBreakPointSoftware
,
27 KdbBreakPointHardware
,
28 KdbBreakPointTemporary
29 } KDB_BREAKPOINT_TYPE
;
31 typedef enum _KDB_ACCESS_TYPE
39 typedef struct _KDB_BREAKPOINT
41 KDB_BREAKPOINT_TYPE Type
; /* Type of breakpoint */
42 BOOLEAN Enabled
; /* Whether the bp is enabled */
43 ULONG_PTR Address
; /* Address of the breakpoint */
44 BOOLEAN Global
; /* Whether the breakpoint is global or local to a process */
45 PEPROCESS Process
; /* Owning process */
46 PCHAR ConditionExpression
;
49 /* KdbBreakPointSoftware */
50 UCHAR SavedInstruction
;
51 /* KdbBreakPointHardware */
55 KDB_ACCESS_TYPE AccessType
;
58 } KDB_BREAKPOINT
, *PKDB_BREAKPOINT
;
60 typedef enum _KDB_ENTER_CONDITION
66 } KDB_ENTER_CONDITION
;
68 /* These values MUST be nonzero. They're used as bit masks. */
69 typedef enum _KDB_OUTPUT_SETTINGS
71 KD_DEBUG_KDSERIAL
= 1,
73 } KDB_OUTPUT_SETTINGS
;
75 /* FUNCTIONS *****************************************************************/
77 /* from i386/i386-dis.c */
82 IN ULONG IntelSyntax
);
88 /* from i386/kdb_help.S */
91 KdbpStackSwitchAndCall(
93 IN
VOID (*Function
)(VOID
));
97 extern PCHAR KdbInitFileBuffer
;
104 IN BOOLEAN EnteredOnSingleStep
);
108 IN PUNICODE_STRING Name
);
111 KdbpCliInterpretInitFile();
118 /* from kdb_expr.c */
121 KdbpRpnEvaluateExpression(
123 IN PKDB_KTRAP_FRAME TrapFrame
,
124 OUT PULONGLONG Result
,
125 OUT PLONG ErrOffset OPTIONAL
,
126 OUT PCHAR ErrMsg OPTIONAL
);
129 KdbpRpnParseExpression(
131 OUT PLONG ErrOffset OPTIONAL
,
132 OUT PCHAR ErrMsg OPTIONAL
);
135 KdbpRpnEvaluateParsedExpression(
137 IN PKDB_KTRAP_FRAME TrapFrame
,
138 OUT PULONGLONG Result
,
139 OUT PLONG ErrOffset OPTIONAL
,
140 OUT PCHAR ErrMsg OPTIONAL
);
142 /* from kdb_symbols.c */
145 KdbpSymFindModuleByAddress(IN PVOID Address
,
146 OUT PKDB_MODULE_INFO pInfo
);
149 KdbpSymFindModuleByName(IN LPCWSTR Name
,
150 OUT PKDB_MODULE_INFO pInfo
);
153 KdbpSymFindModuleByIndex(IN INT Index
,
154 OUT PKDB_MODULE_INFO pInfo
);
158 extern PEPROCESS KdbCurrentProcess
;
159 extern PETHREAD KdbCurrentThread
;
160 extern LONG KdbLastBreakPointNr
;
161 extern ULONG KdbNumSingleSteps
;
162 extern BOOLEAN KdbSingleStepOver
;
163 extern PKDB_KTRAP_FRAME KdbCurrentTrapFrame
;
164 extern ULONG KdbDebugState
;
167 KdbpGetNextBreakPointNr(
168 IN ULONG Start OPTIONAL
);
171 KdbpGetBreakPointInfo(
172 IN ULONG BreakPointNr
,
173 OUT ULONG_PTR
*Address OPTIONAL
,
174 OUT KDB_BREAKPOINT_TYPE
*Type OPTIONAL
,
175 OUT UCHAR
*Size OPTIONAL
,
176 OUT KDB_ACCESS_TYPE
*AccessType OPTIONAL
,
177 OUT UCHAR
*DebugReg OPTIONAL
,
178 OUT BOOLEAN
*Enabled OPTIONAL
,
179 OUT BOOLEAN
*Global OPTIONAL
,
180 OUT PEPROCESS
*Process OPTIONAL
,
181 OUT PCHAR
*ConditionExpression OPTIONAL
);
184 KdbpInsertBreakPoint(
185 IN ULONG_PTR Address
,
186 IN KDB_BREAKPOINT_TYPE Type
,
187 IN UCHAR Size OPTIONAL
,
188 IN KDB_ACCESS_TYPE AccessType OPTIONAL
,
189 IN PCHAR ConditionExpression OPTIONAL
,
191 OUT PULONG BreakPointNumber OPTIONAL
);
194 KdbpDeleteBreakPoint(
195 IN LONG BreakPointNr OPTIONAL
,
196 IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL
);
199 KdbpEnableBreakPoint(
200 IN LONG BreakPointNr OPTIONAL
,
201 IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL
);
204 KdbpDisableBreakPoint(
205 IN LONG BreakPointNr OPTIONAL
,
206 IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL
);
209 KdbpGetEnterCondition(
211 IN BOOLEAN FirstChance
,
212 OUT KDB_ENTER_CONDITION
*Condition
);
215 KdbpSetEnterCondition(
217 IN BOOLEAN FirstChance
,
218 IN KDB_ENTER_CONDITION Condition
);
230 KdbpGetCommandLineSettings(PCHAR p1
);
233 KdbEnterDebuggerException(PEXCEPTION_RECORD ExceptionRecord
,
234 KPROCESSOR_MODE PreviousMode
,
236 PKTRAP_FRAME TrapFrame
,
237 BOOLEAN FirstChance
);
238 /* other functions */
240 #define KdbpSafeReadMemory(dst, src, size) MmSafeCopyFromUser(dst, src, size)
241 #define KdbpSafeWriteMemory(dst, src, size) MmSafeCopyToUser(dst, src, size)
243 #define KdbpGetCharKeyboard(ScanCode) KdbpTryGetCharKeyboard(ScanCode, 0)
245 KdbpTryGetCharKeyboard(PULONG ScanCode
, UINT Retry
);
247 #define KdbpGetCharSerial() KdbpTryGetCharSerial(0)
249 KdbpTryGetCharSerial(UINT Retry
);
258 DbgEnableFile(PCH Filename
);
260 DbgDisableFile(PCH Filename
);
266 #endif /* NTOSKRNL_KDB_H */