Skip to content

Commit 538e6b0

Browse files
authored
use qemu primitives to perform gdb rw (#71)
1 parent ddbe5be commit 538e6b0

File tree

2 files changed

+21
-15
lines changed

2 files changed

+21
-15
lines changed

cpu-target.c

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,13 @@
4747

4848
//// --- Begin LibAFL code ---
4949

50+
#include "exec/gdbstub.h"
51+
5052
#include "libafl/exit.h"
5153
#include "libafl/hook.h"
5254

55+
int gdb_write_register(CPUState *cpu, uint8_t *mem_buf, int reg);
56+
5357
static __thread GByteArray *libafl_qemu_mem_buf = NULL;
5458

5559
target_ulong libafl_page_from_addr(target_ulong addr);
@@ -128,29 +132,26 @@ int libafl_qemu_cpu_index(CPUState* cpu)
128132

129133
int libafl_qemu_write_reg(CPUState* cpu, int reg, uint8_t* val)
130134
{
131-
CPUClass *cc = CPU_GET_CLASS(cpu);
132-
if (reg < cc->gdb_num_core_regs) {
133-
return cc->gdb_write_register(cpu, val, reg);
134-
}
135-
return 0;
135+
return gdb_write_register(cpu, val, reg);
136136
}
137137

138138
int libafl_qemu_read_reg(CPUState* cpu, int reg, uint8_t* val)
139139
{
140+
int len;
141+
140142
if (libafl_qemu_mem_buf == NULL) {
141143
libafl_qemu_mem_buf = g_byte_array_sized_new(64);
142144
}
143145

144-
CPUClass *cc = CPU_GET_CLASS(cpu);
145-
if (reg < cc->gdb_num_core_regs) {
146-
g_byte_array_set_size(libafl_qemu_mem_buf, 0);
147-
int len = cc->gdb_read_register(cpu, libafl_qemu_mem_buf, reg);
148-
if (len > 0) {
149-
memcpy(val, libafl_qemu_mem_buf->data, len);
150-
}
151-
return len;
146+
g_byte_array_set_size(libafl_qemu_mem_buf, 0);
147+
148+
len = gdb_read_register(cpu, libafl_qemu_mem_buf, reg);
149+
150+
if (len > 0) {
151+
memcpy(val, libafl_qemu_mem_buf->data, len);
152152
}
153-
return 0;
153+
154+
return len;
154155
}
155156

156157
int libafl_qemu_num_regs(CPUState* cpu)

gdbstub/gdbstub.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -533,7 +533,12 @@ int gdb_read_register(CPUState *cpu, GByteArray *buf, int reg)
533533
return 0;
534534
}
535535

536-
static int gdb_write_register(CPUState *cpu, uint8_t *mem_buf, int reg)
536+
537+
//// --- Begin LibAFL code ---
538+
int gdb_write_register(CPUState *cpu, uint8_t *mem_buf, int reg);
539+
/* static */
540+
//// --- End LibAFL code ---
541+
int gdb_write_register(CPUState *cpu, uint8_t *mem_buf, int reg)
537542
{
538543
CPUClass *cc = CPU_GET_CLASS(cpu);
539544
GDBRegisterState *r;

0 commit comments

Comments
 (0)