xref: /reactos/ntoskrnl/kdbg/kdb.h (revision 2687c1b4)
1 #pragma once
2 #include "../kd/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 
55 /* FUNCTIONS *****************************************************************/
56 
57 /* from i386/i386-dis.c */
58 
59 LONG
60 KdbpDisassemble(
61    IN ULONG_PTR Address,
62    IN ULONG IntelSyntax);
63 
64 LONG
65 KdbpGetInstLength(
66    IN ULONG_PTR Address);
67 
68 /* from i386/kdb_help.S */
69 
70 VOID NTAPI
71 KdbpStackSwitchAndCall(
72    IN PVOID NewStack,
73    IN VOID (*Function)(VOID));
74 
75 /* from kdb_cli.c */
76 
77 extern PCHAR KdbInitFileBuffer;
78 
79 NTSTATUS
80 NTAPI
81 KdbInitialize(
82     _In_ PKD_DISPATCH_TABLE DispatchTable,
83     _In_ ULONG BootPhase);
84 
85 BOOLEAN
86 NTAPI
87 KdbRegisterCliCallback(
88     PVOID Callback,
89     BOOLEAN Deregister);
90 
91 NTSTATUS
92 KdbpCliInit(VOID);
93 
94 VOID
95 KdbpCliMainLoop(
96    IN BOOLEAN EnteredOnSingleStep);
97 
98 VOID
99 KdbpCliInterpretInitFile(VOID);
100 
101 VOID
102 KdbpCommandHistoryAppend(
103     _In_ PCSTR Command);
104 
105 PCSTR
106 KdbGetHistoryEntry(
107     _Inout_ PLONG NextIndex,
108     _In_ BOOLEAN Next);
109 
110 VOID
111 KdbpPager(
112     _In_ PCHAR Buffer,
113     _In_ ULONG BufLength);
114 
115 VOID
116 KdbpPrint(
117     _In_ PSTR Format,
118     _In_ ...);
119 
120 VOID
121 KdbpPrintUnicodeString(
122     _In_ PCUNICODE_STRING String);
123 
124 BOOLEAN
125 NTAPI
126 KdbpGetHexNumber(
127     IN PCHAR pszNum,
128     OUT ULONG_PTR *pulValue);
129 
130 /* from kdb_expr.c */
131 
132 BOOLEAN
133 KdbpRpnEvaluateExpression(
134    IN  PCHAR Expression,
135    IN  PKDB_KTRAP_FRAME TrapFrame,
136    OUT PULONGLONG Result,
137    OUT PLONG ErrOffset  OPTIONAL,
138    OUT PCHAR ErrMsg  OPTIONAL);
139 
140 PVOID
141 KdbpRpnParseExpression(
142    IN  PCHAR Expression,
143    OUT PLONG ErrOffset  OPTIONAL,
144    OUT PCHAR ErrMsg  OPTIONAL);
145 
146 BOOLEAN
147 KdbpRpnEvaluateParsedExpression(
148    IN  PVOID Expression,
149    IN  PKDB_KTRAP_FRAME TrapFrame,
150    OUT PULONGLONG Result,
151    OUT PLONG ErrOffset  OPTIONAL,
152    OUT PCHAR ErrMsg  OPTIONAL);
153 
154 /* from kdb_symbols.c */
155 
156 BOOLEAN
157 KdbpSymFindModule(
158     IN PVOID Address  OPTIONAL,
159     IN INT Index  OPTIONAL,
160     OUT PLDR_DATA_TABLE_ENTRY* pLdrEntry);
161 
162 BOOLEAN
163 KdbSymPrintAddress(
164     IN PVOID Address,
165     IN PCONTEXT Context);
166 
167 VOID
168 KdbSymProcessSymbols(
169     _Inout_ PLDR_DATA_TABLE_ENTRY LdrEntry,
170     _In_ BOOLEAN Load);
171 
172 BOOLEAN
173 KdbSymInit(
174     _In_ ULONG BootPhase);
175 
176 /* from kdb.c */
177 
178 extern PEPROCESS KdbCurrentProcess;
179 extern PETHREAD KdbCurrentThread;
180 extern LONG KdbLastBreakPointNr;
181 extern ULONG KdbNumSingleSteps;
182 extern BOOLEAN KdbSingleStepOver;
183 extern PKDB_KTRAP_FRAME KdbCurrentTrapFrame;
184 
185 LONG
186 KdbpGetNextBreakPointNr(
187    IN ULONG Start  OPTIONAL);
188 
189 BOOLEAN
190 KdbpGetBreakPointInfo(
191    IN  ULONG BreakPointNr,
192    OUT ULONG_PTR *Address  OPTIONAL,
193    OUT KDB_BREAKPOINT_TYPE *Type  OPTIONAL,
194    OUT UCHAR *Size  OPTIONAL,
195    OUT KDB_ACCESS_TYPE *AccessType  OPTIONAL,
196    OUT UCHAR *DebugReg  OPTIONAL,
197    OUT BOOLEAN *Enabled  OPTIONAL,
198    OUT BOOLEAN *Global  OPTIONAL,
199    OUT PEPROCESS *Process  OPTIONAL,
200    OUT PCHAR *ConditionExpression  OPTIONAL);
201 
202 NTSTATUS
203 KdbpInsertBreakPoint(
204    IN  ULONG_PTR Address,
205    IN  KDB_BREAKPOINT_TYPE Type,
206    IN  UCHAR Size  OPTIONAL,
207    IN  KDB_ACCESS_TYPE AccessType  OPTIONAL,
208    IN  PCHAR ConditionExpression  OPTIONAL,
209    IN  BOOLEAN Global,
210    OUT PLONG BreakPointNr  OPTIONAL);
211 
212 BOOLEAN
213 KdbpDeleteBreakPoint(
214    IN LONG BreakPointNr  OPTIONAL,
215    IN OUT PKDB_BREAKPOINT BreakPoint  OPTIONAL);
216 
217 BOOLEAN
218 KdbpEnableBreakPoint(
219    IN LONG BreakPointNr  OPTIONAL,
220    IN OUT PKDB_BREAKPOINT BreakPoint  OPTIONAL);
221 
222 BOOLEAN
223 KdbpDisableBreakPoint(
224    IN LONG BreakPointNr  OPTIONAL,
225    IN OUT PKDB_BREAKPOINT BreakPoint  OPTIONAL);
226 
227 BOOLEAN
228 KdbpGetEnterCondition(
229    IN LONG ExceptionNr,
230    IN BOOLEAN FirstChance,
231    OUT KDB_ENTER_CONDITION *Condition);
232 
233 BOOLEAN
234 KdbpSetEnterCondition(
235    IN LONG ExceptionNr,
236    IN BOOLEAN FirstChance,
237    IN KDB_ENTER_CONDITION Condition);
238 
239 BOOLEAN
240 KdbpAttachToThread(
241    PVOID ThreadId);
242 
243 BOOLEAN
244 KdbpAttachToProcess(
245    PVOID ProcessId);
246 
247 VOID
248 KdbpGetCommandLineSettings(
249     _In_ PCSTR p1);
250 
251 KD_CONTINUE_TYPE
252 KdbEnterDebuggerException(IN PEXCEPTION_RECORD64 ExceptionRecord,
253                           IN KPROCESSOR_MODE PreviousMode,
254                           IN OUT PCONTEXT Context,
255                           IN BOOLEAN FirstChance);
256 
257 /* other functions */
258 
259 BOOLEAN
260 NTAPI
261 KdpSafeReadMemory(
262     IN ULONG_PTR Addr,
263     IN LONG Len,
264     OUT PVOID Value
265 );
266 
267 BOOLEAN
268 NTAPI
269 KdpSafeWriteMemory(
270     IN ULONG_PTR Addr,
271     IN LONG Len,
272     IN ULONGLONG Value
273 );
274 
275 NTSTATUS
276 KdbpSafeReadMemory(OUT PVOID Dest,
277                    IN PVOID Src,
278                    IN ULONG Bytes);
279 
280 NTSTATUS
281 KdbpSafeWriteMemory(OUT PVOID Dest,
282                     IN PVOID Src,
283                     IN ULONG Bytes);
284 
285 VOID
286 KbdDisableMouse(VOID);
287 
288 VOID
289 KbdEnableMouse(VOID);
290