1 #ifndef __MONO_DEBUGGER_PROTOCOL_H__
2 #define __MONO_DEBUGGER_PROTOCOL_H__
6 #define HEADER_LENGTH 11
7 #define REPLY_PACKET 0x80
10 * Wire Protocol definitions
13 #define MAJOR_VERSION 3
14 #define MINOR_VERSION 0
17 MDBGPROT_CMD_COMPOSITE
= 100
18 } MdbgProtCmdComposite
;
21 MDBGPROT_CMD_VM_VERSION
= 1,
22 MDBGPROT_CMD_VM_ALL_THREADS
= 2,
23 MDBGPROT_CMD_VM_SUSPEND
= 3,
24 MDBGPROT_CMD_VM_RESUME
= 4,
25 MDBGPROT_CMD_VM_EXIT
= 5,
26 MDBGPROT_CMD_VM_DISPOSE
= 6,
27 MDBGPROT_CMD_VM_INVOKE_METHOD
= 7,
28 MDBGPROT_CMD_VM_SET_PROTOCOL_VERSION
= 8,
29 MDBGPROT_CMD_VM_ABORT_INVOKE
= 9,
30 MDBGPROT_CMD_VM_SET_KEEPALIVE
= 10,
31 MDBGPROT_CMD_VM_GET_TYPES_FOR_SOURCE_FILE
= 11,
32 MDBGPROT_CMD_VM_GET_TYPES
= 12,
33 MDBGPROT_CMD_VM_INVOKE_METHODS
= 13,
34 MDBGPROT_CMD_VM_START_BUFFERING
= 14,
35 MDBGPROT_CMD_VM_STOP_BUFFERING
= 15
39 MDBGPROT_CMD_SET_VM
= 1,
40 MDBGPROT_CMD_SET_OBJECT_REF
= 9,
41 MDBGPROT_CMD_SET_STRING_REF
= 10,
42 MDBGPROT_CMD_SET_THREAD
= 11,
43 MDBGPROT_CMD_SET_ARRAY_REF
= 13,
44 MDBGPROT_CMD_SET_EVENT_REQUEST
= 15,
45 MDBGPROT_CMD_SET_STACK_FRAME
= 16,
46 MDBGPROT_CMD_SET_APPDOMAIN
= 20,
47 MDBGPROT_CMD_SET_ASSEMBLY
= 21,
48 MDBGPROT_CMD_SET_METHOD
= 22,
49 MDBGPROT_CMD_SET_TYPE
= 23,
50 MDBGPROT_CMD_SET_MODULE
= 24,
51 MDBGPROT_CMD_SET_FIELD
= 25,
52 MDBGPROT_CMD_SET_EVENT
= 64,
53 MDBGPROT_CMD_SET_POINTER
= 65
57 MDBGPROT_ERR_NONE
= 0,
58 MDBGPROT_ERR_INVALID_OBJECT
= 20,
59 MDBGPROT_ERR_INVALID_FIELDID
= 25,
60 MDBGPROT_ERR_INVALID_FRAMEID
= 30,
61 MDBGPROT_ERR_NOT_IMPLEMENTED
= 100,
62 MDBGPROT_ERR_NOT_SUSPENDED
= 101,
63 MDBGPROT_ERR_INVALID_ARGUMENT
= 102,
64 MDBGPROT_ERR_UNLOADED
= 103,
65 MDBGPROT_ERR_NO_INVOCATION
= 104,
66 MDBGPROT_ERR_ABSENT_INFORMATION
= 105,
67 MDBGPROT_ERR_NO_SEQ_POINT_AT_IL_OFFSET
= 106,
68 MDBGPROT_ERR_INVOKE_ABORTED
= 107,
69 MDBGPROT_ERR_LOADER_ERROR
= 200, /*XXX extend the protocol to pass this information down the pipe */
73 MDBGPROT_TOKEN_TYPE_STRING
= 0,
74 MDBGPROT_TOKEN_TYPE_TYPE
= 1,
75 MDBGPROT_TOKEN_TYPE_FIELD
= 2,
76 MDBGPROT_TOKEN_TYPE_METHOD
= 3,
77 MDBGPROT_TOKEN_TYPE_UNKNOWN
= 4
78 } MdbgProtDebuggerTokenType
;
81 MDBGPROT_VALUE_TYPE_ID_NULL
= 0xf0,
82 MDBGPROT_VALUE_TYPE_ID_TYPE
= 0xf1,
83 MDBGPROT_VALUE_TYPE_ID_PARENT_VTYPE
= 0xf2,
84 MDBGPROT_VALUE_TYPE_ID_FIXED_ARRAY
= 0xf3
85 } MdbgProtValueTypeId
;
88 MDBGPROT_FRAME_FLAG_DEBUGGER_INVOKE
= 1,
89 MDBGPROT_FRAME_FLAG_NATIVE_TRANSITION
= 2
90 } MdbgProtStackFrameFlags
;
93 MDBGPROT_INVOKE_FLAG_DISABLE_BREAKPOINTS
= 1,
94 MDBGPROT_INVOKE_FLAG_SINGLE_THREADED
= 2,
95 MDBGPROT_INVOKE_FLAG_RETURN_OUT_THIS
= 4,
96 MDBGPROT_INVOKE_FLAG_RETURN_OUT_ARGS
= 8,
97 MDBGPROT_INVOKE_FLAG_VIRTUAL
= 16
98 } MdbgProtInvokeFlags
;
101 BINDING_FLAGS_IGNORE_CASE
= 0x70000000,
102 } MdbgProtBindingFlagsExtensions
;
105 MDBGPROT_CMD_THREAD_GET_FRAME_INFO
= 1,
106 MDBGPROT_CMD_THREAD_GET_NAME
= 2,
107 MDBGPROT_CMD_THREAD_GET_STATE
= 3,
108 MDBGPROT_CMD_THREAD_GET_INFO
= 4,
109 MDBGPROT_CMD_THREAD_GET_ID
= 5,
110 MDBGPROT_CMD_THREAD_GET_TID
= 6,
111 MDBGPROT_CMD_THREAD_SET_IP
= 7,
112 MDBGPROT_CMD_THREAD_ELAPSED_TIME
= 8
116 MDBGPROT_CMD_APPDOMAIN_GET_ROOT_DOMAIN
= 1,
117 MDBGPROT_CMD_APPDOMAIN_GET_FRIENDLY_NAME
= 2,
118 MDBGPROT_CMD_APPDOMAIN_GET_ASSEMBLIES
= 3,
119 MDBGPROT_CMD_APPDOMAIN_GET_ENTRY_ASSEMBLY
= 4,
120 MDBGPROT_CMD_APPDOMAIN_CREATE_STRING
= 5,
121 MDBGPROT_CMD_APPDOMAIN_GET_CORLIB
= 6,
122 MDBGPROT_CMD_APPDOMAIN_CREATE_BOXED_VALUE
= 7,
123 MDBGPROT_CMD_APPDOMAIN_CREATE_BYTE_ARRAY
= 8,
124 } MdbgProtCmdAppDomain
;
127 MDBGPROT_CMD_ASSEMBLY_GET_LOCATION
= 1,
128 MDBGPROT_CMD_ASSEMBLY_GET_ENTRY_POINT
= 2,
129 MDBGPROT_CMD_ASSEMBLY_GET_MANIFEST_MODULE
= 3,
130 MDBGPROT_CMD_ASSEMBLY_GET_OBJECT
= 4,
131 MDBGPROT_CMD_ASSEMBLY_GET_TYPE
= 5,
132 MDBGPROT_CMD_ASSEMBLY_GET_NAME
= 6,
133 MDBGPROT_CMD_ASSEMBLY_GET_DOMAIN
= 7,
134 MDBGPROT_CMD_ASSEMBLY_GET_METADATA_BLOB
= 8,
135 MDBGPROT_CMD_ASSEMBLY_GET_IS_DYNAMIC
= 9,
136 MDBGPROT_CMD_ASSEMBLY_GET_PDB_BLOB
= 10,
137 MDBGPROT_CMD_ASSEMBLY_GET_TYPE_FROM_TOKEN
= 11,
138 MDBGPROT_CMD_ASSEMBLY_GET_METHOD_FROM_TOKEN
= 12,
139 MDBGPROT_CMD_ASSEMBLY_HAS_DEBUG_INFO
= 13,
140 MDBGPROT_CMD_ASSEMBLY_GET_CATTRS
= 14,
141 MDBGPROT_CMD_ASSEMBLY_GET_CUSTOM_ATTRIBUTES
= 15
142 } MdbgProtCmdAssembly
;
145 MDBGPROT_CMD_MODULE_GET_INFO
= 1,
149 MDBGPROT_CMD_FIELD_GET_INFO
= 1,
153 MDBGPROT_CMD_PROPERTY_GET_INFO
= 1,
154 } MdbgProtCmdProperty
;
157 MDBGPROT_CMD_METHOD_GET_NAME
= 1,
158 MDBGPROT_CMD_METHOD_GET_DECLARING_TYPE
= 2,
159 MDBGPROT_CMD_METHOD_GET_DEBUG_INFO
= 3,
160 MDBGPROT_CMD_METHOD_GET_PARAM_INFO
= 4,
161 MDBGPROT_CMD_METHOD_GET_LOCALS_INFO
= 5,
162 MDBGPROT_CMD_METHOD_GET_INFO
= 6,
163 MDBGPROT_CMD_METHOD_GET_BODY
= 7,
164 MDBGPROT_CMD_METHOD_RESOLVE_TOKEN
= 8,
165 MDBGPROT_CMD_METHOD_GET_CATTRS
= 9,
166 MDBGPROT_CMD_METHOD_MAKE_GENERIC_METHOD
= 10,
167 MDBGPROT_CMD_METHOD_TOKEN
= 11,
168 MDBGPROT_CMD_METHOD_ASSEMBLY
= 12
172 MDBGPROT_CMD_TYPE_GET_INFO
= 1,
173 MDBGPROT_CMD_TYPE_GET_METHODS
= 2,
174 MDBGPROT_CMD_TYPE_GET_FIELDS
= 3,
175 MDBGPROT_CMD_TYPE_GET_VALUES
= 4,
176 MDBGPROT_CMD_TYPE_GET_OBJECT
= 5,
177 MDBGPROT_CMD_TYPE_GET_SOURCE_FILES
= 6,
178 MDBGPROT_CMD_TYPE_SET_VALUES
= 7,
179 MDBGPROT_CMD_TYPE_IS_ASSIGNABLE_FROM
= 8,
180 MDBGPROT_CMD_TYPE_GET_PROPERTIES
= 9,
181 MDBGPROT_CMD_TYPE_GET_CATTRS
= 10,
182 MDBGPROT_CMD_TYPE_GET_FIELD_CATTRS
= 11,
183 MDBGPROT_CMD_TYPE_GET_PROPERTY_CATTRS
= 12,
184 MDBGPROT_CMD_TYPE_GET_SOURCE_FILES_2
= 13,
185 MDBGPROT_CMD_TYPE_GET_VALUES_2
= 14,
186 MDBGPROT_CMD_TYPE_GET_METHODS_BY_NAME_FLAGS
= 15,
187 MDBGPROT_CMD_TYPE_GET_INTERFACES
= 16,
188 MDBGPROT_CMD_TYPE_GET_INTERFACE_MAP
= 17,
189 MDBGPROT_CMD_TYPE_IS_INITIALIZED
= 18,
190 MDBGPROT_CMD_TYPE_CREATE_INSTANCE
= 19,
191 MDBGPROT_CMD_TYPE_GET_VALUE_SIZE
= 20
195 MDBGPROT_CMD_STACK_FRAME_GET_VALUES
= 1,
196 MDBGPROT_CMD_STACK_FRAME_GET_THIS
= 2,
197 MDBGPROT_CMD_STACK_FRAME_SET_VALUES
= 3,
198 MDBGPROT_CMD_STACK_FRAME_GET_DOMAIN
= 4,
199 MDBGPROT_CMD_STACK_FRAME_SET_THIS
= 5,
200 MDBGPROT_CMD_STACK_FRAME_GET_ARGUMENT
= 6,
201 } MdbgProtCmdStackFrame
;
204 MDBGPROT_CMD_ARRAY_REF_GET_LENGTH
= 1,
205 MDBGPROT_CMD_ARRAY_REF_GET_VALUES
= 2,
206 MDBGPROT_CMD_ARRAY_REF_SET_VALUES
= 3,
207 MDBGPROT_CMD_ARRAY_REF_GET_TYPE
= 4
211 MDBGPROT_CMD_STRING_REF_GET_VALUE
= 1,
212 MDBGPROT_CMD_STRING_REF_GET_LENGTH
= 2,
213 MDBGPROT_CMD_STRING_REF_GET_CHARS
= 3
217 MDBGPROT_CMD_POINTER_GET_VALUE
= 1
218 } MdbgProtCmdPointer
;
221 MDBGPROT_CMD_OBJECT_REF_GET_TYPE
= 1,
222 MDBGPROT_CMD_OBJECT_REF_GET_VALUES
= 2,
223 MDBGPROT_CMD_OBJECT_REF_IS_COLLECTED
= 3,
224 MDBGPROT_CMD_OBJECT_REF_GET_ADDRESS
= 4,
225 MDBGPROT_CMD_OBJECT_REF_GET_DOMAIN
= 5,
226 MDBGPROT_CMD_OBJECT_REF_SET_VALUES
= 6,
227 MDBGPROT_CMD_OBJECT_REF_GET_INFO
= 7,
228 MDBGPROT_CMD_OBJECT_REF_GET_VALUES_ICORDBG
= 8
232 MDBGPROT_SUSPEND_POLICY_NONE
= 0,
233 MDBGPROT_SUSPEND_POLICY_EVENT_THREAD
= 1,
234 MDBGPROT_SUSPEND_POLICY_ALL
= 2
235 } MdbgProtSuspendPolicy
;
238 MDBGPROT_CMD_EVENT_REQUEST_SET
= 1,
239 MDBGPROT_CMD_EVENT_REQUEST_CLEAR
= 2,
240 MDBGPROT_CMD_EVENT_REQUEST_CLEAR_ALL_BREAKPOINTS
= 3
244 uint8_t *buf
, *p
, *end
;
257 typedef struct ReplyPacket
{
260 MdbgProtBuffer
*data
;
261 } MdbgProtReplyPacket
;
264 MDBGPROT_EVENT_KIND_VM_START
= 0,
265 MDBGPROT_EVENT_KIND_VM_DEATH
= 1,
266 MDBGPROT_EVENT_KIND_THREAD_START
= 2,
267 MDBGPROT_EVENT_KIND_THREAD_DEATH
= 3,
268 MDBGPROT_EVENT_KIND_APPDOMAIN_CREATE
= 4,
269 MDBGPROT_EVENT_KIND_APPDOMAIN_UNLOAD
= 5,
270 MDBGPROT_EVENT_KIND_METHOD_ENTRY
= 6,
271 MDBGPROT_EVENT_KIND_METHOD_EXIT
= 7,
272 MDBGPROT_EVENT_KIND_ASSEMBLY_LOAD
= 8,
273 MDBGPROT_EVENT_KIND_ASSEMBLY_UNLOAD
= 9,
274 MDBGPROT_EVENT_KIND_BREAKPOINT
= 10,
275 MDBGPROT_EVENT_KIND_STEP
= 11,
276 MDBGPROT_EVENT_KIND_TYPE_LOAD
= 12,
277 MDBGPROT_EVENT_KIND_EXCEPTION
= 13,
278 MDBGPROT_EVENT_KIND_KEEPALIVE
= 14,
279 MDBGPROT_EVENT_KIND_USER_BREAK
= 15,
280 MDBGPROT_EVENT_KIND_USER_LOG
= 16,
281 MDBGPROT_EVENT_KIND_CRASH
= 17
285 MDBGPROT_MOD_KIND_COUNT
= 1,
286 MDBGPROT_MOD_KIND_THREAD_ONLY
= 3,
287 MDBGPROT_MOD_KIND_LOCATION_ONLY
= 7,
288 MDBGPROT_MOD_KIND_EXCEPTION_ONLY
= 8,
289 MDBGPROT_MOD_KIND_STEP
= 10,
290 MDBGPROT_MOD_KIND_ASSEMBLY_ONLY
= 11,
291 MDBGPROT_MOD_KIND_SOURCE_FILE_ONLY
= 12,
292 MDBGPROT_MOD_KIND_TYPE_NAME_ONLY
= 13,
293 MDBGPROT_MOD_KIND_NONE
= 14
294 } MdbgProtModifierKind
;
297 MDBGPROT_STEP_DEPTH_INTO
= 0,
298 MDBGPROT_STEP_DEPTH_OVER
= 1,
299 MDBGPROT_STEP_DEPTH_OUT
= 2
303 MDBGPROT_STEP_SIZE_MIN
= 0,
304 MDBGPROT_STEP_SIZE_LINE
= 1
308 MDBGPROT_STEP_FILTER_NONE
= 0,
309 MDBGPROT_STEP_FILTER_STATIC_CTOR
= 1,
310 MDBGPROT_STEP_FILTER_DEBUGGER_HIDDEN
= 2,
311 MDBGPROT_STEP_FILTER_DEBUGGER_STEP_THROUGH
= 4,
312 MDBGPROT_STEP_FILTER_DEBUGGER_NON_USER_CODE
= 8
313 } MdbgProtStepFilter
;
331 int m_dbgprot_buffer_add_command_header (MdbgProtBuffer
*recvbuf
, int cmd_set
, int cmd
, MdbgProtBuffer
*out
);
332 void m_dbgprot_decode_command_header (MdbgProtBuffer
*recvbuf
, MdbgProtHeader
*header
);
335 * Functions to decode protocol data
338 int m_dbgprot_decode_byte (uint8_t *buf
, uint8_t **endbuf
, uint8_t *limit
);
339 int m_dbgprot_decode_int (uint8_t *buf
, uint8_t **endbuf
, uint8_t *limit
);
340 int64_t m_dbgprot_decode_long (uint8_t *buf
, uint8_t **endbuf
, uint8_t *limit
);
341 int m_dbgprot_decode_id (uint8_t *buf
, uint8_t **endbuf
, uint8_t *limit
);
342 char* m_dbgprot_decode_string (uint8_t *buf
, uint8_t **endbuf
, uint8_t *limit
);
343 uint8_t* m_dbgprot_decode_byte_array(uint8_t* buf
, uint8_t** endbuf
, uint8_t* limit
, uint32_t* len
);
346 * Functions to encode protocol data
349 void m_dbgprot_buffer_init (MdbgProtBuffer
*buf
, int size
);
350 int m_dbgprot_buffer_len (MdbgProtBuffer
*buf
);
351 void m_dbgprot_buffer_make_room (MdbgProtBuffer
*buf
, int size
);
352 void m_dbgprot_buffer_add_byte (MdbgProtBuffer
*buf
, uint8_t val
);
353 void m_dbgprot_buffer_add_short (MdbgProtBuffer
*buf
, uint32_t val
);
354 void m_dbgprot_buffer_add_int (MdbgProtBuffer
*buf
, uint32_t val
);
355 void m_dbgprot_buffer_add_long (MdbgProtBuffer
*buf
, uint64_t l
);
356 void m_dbgprot_buffer_add_id (MdbgProtBuffer
*buf
, int id
);
357 void m_dbgprot_buffer_add_data (MdbgProtBuffer
*buf
, uint8_t *data
, int len
);
358 void m_dbgprot_buffer_add_utf16 (MdbgProtBuffer
*buf
, uint8_t *data
, int len
);
359 void m_dbgprot_buffer_add_string (MdbgProtBuffer
*buf
, const char *str
);
360 void m_dbgprot_buffer_add_byte_array (MdbgProtBuffer
*buf
, uint8_t *bytes
, uint32_t arr_len
);
361 void m_dbgprot_buffer_add_buffer (MdbgProtBuffer
*buf
, MdbgProtBuffer
*data
);
362 void m_dbgprot_buffer_free (MdbgProtBuffer
*buf
);
364 const char* m_dbgprot_event_to_string (MdbgProtEventKind event
);