libafl custom monitor commands in gdbstub
This commit is contained in:
parent
d840462c2e
commit
c5539950d9
55
gdbstub.c
55
gdbstub.c
@ -2158,6 +2158,58 @@ static void handle_query_offsets(GArray *params, void *user_ctx)
|
||||
ts->info->data_offset);
|
||||
put_strbuf();
|
||||
}
|
||||
|
||||
//// --- Begin LibAFL code ---
|
||||
|
||||
struct libafl_custom_gdb_cmd {
|
||||
void (*callback)(uint8_t*, size_t, void*);
|
||||
void* data;
|
||||
struct libafl_custom_gdb_cmd* next;
|
||||
};
|
||||
|
||||
struct libafl_custom_gdb_cmd* libafl_qemu_gdb_cmds = NULL;
|
||||
|
||||
void libafl_qemu_add_gdb_cmd(void (*callback)(uint8_t*, size_t, void*), void* data);
|
||||
void libafl_qemu_add_gdb_cmd(void (*callback)(uint8_t*, size_t, void*), void* data)
|
||||
{
|
||||
struct libafl_custom_gdb_cmd* c = malloc(sizeof(struct libafl_custom_gdb_cmd));
|
||||
c->callback = callback;
|
||||
c->data = data;
|
||||
c->next = libafl_qemu_gdb_cmds;
|
||||
libafl_qemu_gdb_cmds = c;
|
||||
}
|
||||
|
||||
static void handle_query_rcmd(GArray *params, void *user_ctx)
|
||||
{
|
||||
// const guint8 zero = 0;
|
||||
int len;
|
||||
|
||||
if (!params->len) {
|
||||
put_packet("E22");
|
||||
return;
|
||||
}
|
||||
|
||||
len = strlen(get_param(params, 0)->data);
|
||||
if (len % 2) {
|
||||
put_packet("E01");
|
||||
return;
|
||||
}
|
||||
|
||||
g_assert(gdbserver_state.mem_buf->len == 0);
|
||||
len = len / 2;
|
||||
hextomem(gdbserver_state.mem_buf, get_param(params, 0)->data, len);
|
||||
// g_byte_array_append(gdbserver_state.mem_buf, &zero, 1);
|
||||
|
||||
struct libafl_custom_gdb_cmd** c = &libafl_qemu_gdb_cmds;
|
||||
while (*c) {
|
||||
(*c)->callback(gdbserver_state.mem_buf->data, gdbserver_state.mem_buf->len, (*c)->data);
|
||||
c = &(*c)->next;
|
||||
}
|
||||
|
||||
put_packet("OK");
|
||||
}
|
||||
|
||||
//// --- End LibAFL code ---
|
||||
#else
|
||||
static void handle_query_rcmd(GArray *params, void *user_ctx)
|
||||
{
|
||||
@ -2394,14 +2446,13 @@ static const GdbCmdParseEntry gdb_gen_query_table[] = {
|
||||
.handler = handle_query_offsets,
|
||||
.cmd = "Offsets",
|
||||
},
|
||||
#else
|
||||
#endif
|
||||
{
|
||||
.handler = handle_query_rcmd,
|
||||
.cmd = "Rcmd,",
|
||||
.cmd_startswith = 1,
|
||||
.schema = "s0"
|
||||
},
|
||||
#endif
|
||||
{
|
||||
.handler = handle_query_supported,
|
||||
.cmd = "Supported:",
|
||||
|
Loading…
x
Reference in New Issue
Block a user