|
47 | 47 |
|
48 | 48 | //// --- Begin LibAFL code ---
|
49 | 49 |
|
| 50 | +#include "exec/gdbstub.h" |
| 51 | + |
50 | 52 | #include "libafl/exit.h"
|
51 | 53 | #include "libafl/hook.h"
|
52 | 54 |
|
| 55 | +int gdb_write_register(CPUState *cpu, uint8_t *mem_buf, int reg); |
| 56 | + |
53 | 57 | static __thread GByteArray *libafl_qemu_mem_buf = NULL;
|
54 | 58 |
|
55 | 59 | target_ulong libafl_page_from_addr(target_ulong addr);
|
@@ -128,29 +132,26 @@ int libafl_qemu_cpu_index(CPUState* cpu)
|
128 | 132 |
|
129 | 133 | int libafl_qemu_write_reg(CPUState* cpu, int reg, uint8_t* val)
|
130 | 134 | {
|
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); |
136 | 136 | }
|
137 | 137 |
|
138 | 138 | int libafl_qemu_read_reg(CPUState* cpu, int reg, uint8_t* val)
|
139 | 139 | {
|
| 140 | + int len; |
| 141 | + |
140 | 142 | if (libafl_qemu_mem_buf == NULL) {
|
141 | 143 | libafl_qemu_mem_buf = g_byte_array_sized_new(64);
|
142 | 144 | }
|
143 | 145 |
|
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); |
152 | 152 | }
|
153 |
| - return 0; |
| 153 | + |
| 154 | + return len; |
154 | 155 | }
|
155 | 156 |
|
156 | 157 | int libafl_qemu_num_regs(CPUState* cpu)
|
|
0 commit comments