xref: /reactos/ntoskrnl/kdbg/kdb.h (revision 171a9206)
1 #pragma once
2 #include "internal/kd.h"
3 
4 /* TYPES *********************************************************************/
5 
6 /* from kdb.c */
7 typedef CONTEXT KDB_KTRAP_FRAME, *PKDB_KTRAP_FRAME;
8 
9 typedef enum _KDB_BREAKPOINT_TYPE
10 {
11    KdbBreakPointNone = 0,
12    KdbBreakPointSoftware,
13    KdbBreakPointHardware,
14    KdbBreakPointTemporary
15 } KDB_BREAKPOINT_TYPE;
16 
17 typedef enum _KDB_ACCESS_TYPE
18 {
19    KdbAccessRead,
20    KdbAccessWrite,
21    KdbAccessReadWrite,
22    KdbAccessExec
23 } KDB_ACCESS_TYPE;
24 
25 typedef struct _KDB_BREAKPOINT
26 {
27    KDB_BREAKPOINT_TYPE    Type;         /* Type of breakpoint */
28    BOOLEAN                Enabled;      /* Whether the bp is enabled */
29    ULONG_PTR              Address;      /* Address of the breakpoint */
30    BOOLEAN                Global;       /* Whether the breakpoint is global or local to a process */
31    PEPROCESS              Process;      /* Owning process */
32    PCHAR                  ConditionExpression;
33    PVOID                  Condition;
34    union {
35       /* KdbBreakPointSoftware */
36       UCHAR               SavedInstruction;
37       /* KdbBreakPointHardware */
38       struct {
39          UCHAR            DebugReg : 2;
40          UCHAR            Size : 3;
41          KDB_ACCESS_TYPE  AccessType;
42       } Hw;
43    } Data;
44 } KDB_BREAKPOINT, *PKDB_BREAKPOINT;
45 
46 typedef enum _KDB_ENTER_CONDITION
47 {
48    KdbDoNotEnter,
49    KdbEnterAlways,
50    KdbEnterFromKmode,
51    KdbEnterFromUmode
52 } KDB_ENTER_CONDITION;
53 
54 /* These values MUST be nonzero.  They're used as bit masks. */
55 typedef enum _KDB_OUTPUT_SETTINGS
56 {
57    KD_DEBUG_KDSERIAL = 1,
58    KD_DEBUG_KDNOECHO = 2
59 } KDB_OUTPUT_SETTINGS;
60 
61 /* FUNCTIONS *****************************************************************/
62 
63 /* from i386/i386-dis.c */
64 
65 LONG
66 KdbpDisassemble(
67    IN ULONG Address,
68    IN ULONG IntelSyntax);
69 
70 LONG
71 KdbpGetInstLength(
72    IN ULONG Address);
73 
74 /* from i386/kdb_help.S */
75 
76 VOID NTAPI
77 KdbpStackSwitchAndCall(
78    IN PVOID NewStack,
79    IN VOID (*Function)(VOID));
80 
81 /* from kdb_cli.c */
82 
83 extern PCHAR KdbInitFileBuffer;
84 
85 BOOLEAN
86 NTAPI
87 KdbRegisterCliCallback(
88     PVOID Callback,
89     BOOLEAN Deregister);
90 
91 VOID
92 KdbpCliInit(VOID);
93 
94 VOID
95 KdbpCliMainLoop(
96    IN BOOLEAN EnteredOnSingleStep);
97 
98 VOID
99 KdbpCliModuleLoaded(
100    IN PUNICODE_STRING Name);
101 
102 VOID
103 KdbpCliInterpretInitFile(VOID);
104 
105 VOID
106 KdbpPrint(
107    IN PCHAR Format,
108    IN ...  OPTIONAL);
109 
110 BOOLEAN
111 NTAPI
112 KdbpGetHexNumber(
113     IN PCHAR pszNum,
114     OUT ULONG_PTR *pulValue);
115 
116 /* from kdb_expr.c */
117 
118 BOOLEAN
119 KdbpRpnEvaluateExpression(
120    IN  PCHAR Expression,
121    IN  PKDB_KTRAP_FRAME TrapFrame,
122    OUT PULONGLONG Result,
123    OUT PLONG ErrOffset  OPTIONAL,
124    OUT PCHAR ErrMsg  OPTIONAL);
125 
126 PVOID
127 KdbpRpnParseExpression(
128    IN  PCHAR Expression,
129    OUT PLONG ErrOffset  OPTIONAL,
130    OUT PCHAR ErrMsg  OPTIONAL);
131 
132 BOOLEAN
133 KdbpRpnEvaluateParsedExpression(
134    IN  PVOID Expression,
135    IN  PKDB_KTRAP_FRAME TrapFrame,
136    OUT PULONGLONG Result,
137    OUT PLONG ErrOffset  OPTIONAL,
138    OUT PCHAR ErrMsg  OPTIONAL);
139 
140 /* from kdb_symbols.c */
141 
142 BOOLEAN
143 KdbpSymFindModule(
144     IN PVOID Address  OPTIONAL,
145     IN INT Index  OPTIONAL,
146     OUT PLDR_DATA_TABLE_ENTRY* pLdrEntry);
147 
148 BOOLEAN
149 KdbSymPrintAddress(
150     IN PVOID Address,
151     IN PCONTEXT Context
152 );
153 
154 VOID
155 KdbSymProcessSymbols(
156     _Inout_ PLDR_DATA_TABLE_ENTRY LdrEntry,
157     _In_ BOOLEAN Load);
158 
159 /* from kdb.c */
160 
161 extern PEPROCESS KdbCurrentProcess;
162 extern PETHREAD KdbCurrentThread;
163 extern LONG KdbLastBreakPointNr;
164 extern ULONG KdbNumSingleSteps;
165 extern BOOLEAN KdbSingleStepOver;
166 extern PKDB_KTRAP_FRAME KdbCurrentTrapFrame;
167 extern ULONG KdbDebugState;
168 
169 LONG
170 KdbpGetNextBreakPointNr(
171    IN ULONG Start  OPTIONAL);
172 
173 BOOLEAN
174 KdbpGetBreakPointInfo(
175    IN  ULONG BreakPointNr,
176    OUT ULONG_PTR *Address  OPTIONAL,
177    OUT KDB_BREAKPOINT_TYPE *Type  OPTIONAL,
178    OUT UCHAR *Size  OPTIONAL,
179    OUT KDB_ACCESS_TYPE *AccessType  OPTIONAL,
180    OUT UCHAR *DebugReg  OPTIONAL,
181    OUT BOOLEAN *Enabled  OPTIONAL,
182    OUT BOOLEAN *Global  OPTIONAL,
183    OUT PEPROCESS *Process  OPTIONAL,
184    OUT PCHAR *ConditionExpression  OPTIONAL);
185 
186 NTSTATUS
187 KdbpInsertBreakPoint(
188    IN  ULONG_PTR Address,
189    IN  KDB_BREAKPOINT_TYPE Type,
190    IN  UCHAR Size  OPTIONAL,
191    IN  KDB_ACCESS_TYPE AccessType  OPTIONAL,
192    IN  PCHAR ConditionExpression  OPTIONAL,
193    IN  BOOLEAN Global,
194    OUT PLONG BreakPointNr  OPTIONAL);
195 
196 BOOLEAN
197 KdbpDeleteBreakPoint(
198    IN LONG BreakPointNr  OPTIONAL,
199    IN OUT PKDB_BREAKPOINT BreakPoint  OPTIONAL);
200 
201 BOOLEAN
202 KdbpEnableBreakPoint(
203    IN LONG BreakPointNr  OPTIONAL,
204    IN OUT PKDB_BREAKPOINT BreakPoint  OPTIONAL);
205 
206 BOOLEAN
207 KdbpDisableBreakPoint(
208    IN LONG BreakPointNr  OPTIONAL,
209    IN OUT PKDB_BREAKPOINT BreakPoint  OPTIONAL);
210 
211 BOOLEAN
212 KdbpGetEnterCondition(
213    IN LONG ExceptionNr,
214    IN BOOLEAN FirstChance,
215    OUT KDB_ENTER_CONDITION *Condition);
216 
217 BOOLEAN
218 KdbpSetEnterCondition(
219    IN LONG ExceptionNr,
220    IN BOOLEAN FirstChance,
221    IN KDB_ENTER_CONDITION Condition);
222 
223 BOOLEAN
224 KdbpAttachToThread(
225    PVOID ThreadId);
226 
227 BOOLEAN
228 KdbpAttachToProcess(
229    PVOID ProcessId);
230 
231 VOID
232 NTAPI
233 KdbpGetCommandLineSettings(PCHAR p1);
234 
235 KD_CONTINUE_TYPE
236 KdbEnterDebuggerException(IN PEXCEPTION_RECORD64 ExceptionRecord,
237                           IN KPROCESSOR_MODE PreviousMode,
238                           IN OUT PCONTEXT Context,
239                           IN BOOLEAN FirstChance);
240 
241 KD_CONTINUE_TYPE
242 KdbEnterDebuggerFirstChanceException(
243     IN OUT PKTRAP_FRAME TrapFrame);
244 
245 /* other functions */
246 
247 NTSTATUS
248 KdbpSafeReadMemory(OUT PVOID Dest,
249                    IN PVOID Src,
250                    IN ULONG Bytes);
251 
252 NTSTATUS
253 KdbpSafeWriteMemory(OUT PVOID Dest,
254                     IN PVOID Src,
255                     IN ULONG Bytes);
256 
257 #define KdbpGetCharKeyboard(ScanCode) KdbpTryGetCharKeyboard(ScanCode, 0)
258 CHAR
259 KdbpTryGetCharKeyboard(PULONG ScanCode, ULONG Retry);
260 
261 #define KdbpGetCharSerial()  KdbpTryGetCharSerial(0)
262 CHAR
263 KdbpTryGetCharSerial(ULONG Retry);
264 
265 VOID
266 KdbEnter(VOID);
267 VOID
268 DbgRDebugInit(VOID);
269 VOID
270 DbgShowFiles(VOID);
271 VOID
272 DbgEnableFile(PCH Filename);
273 VOID
274 DbgDisableFile(PCH Filename);
275 VOID
276 KbdDisableMouse(VOID);
277 VOID
278 KbdEnableMouse(VOID);
279