fix registers read bug and expose load_addr to Rust

This commit is contained in:
Andrea Fioraldi 2021-07-07 14:34:27 +02:00
parent cbbe73864b
commit 654aef1147
2 changed files with 10 additions and 1 deletions

1
cpu.c
View File

@ -83,6 +83,7 @@ int libafl_qemu_read_reg(int reg, uint8_t* val)
CPUClass *cc = CPU_GET_CLASS(cpu); CPUClass *cc = CPU_GET_CLASS(cpu);
if (reg < cc->gdb_num_core_regs) { if (reg < cc->gdb_num_core_regs) {
g_byte_array_set_size(libafl_qemu_mem_buf, 0);
int len = cc->gdb_read_register(cpu, libafl_qemu_mem_buf, reg); int len = cc->gdb_read_register(cpu, libafl_qemu_mem_buf, reg);
if (len > 0) { if (len > 0) {
memcpy(val, libafl_qemu_mem_buf->data, len); memcpy(val, libafl_qemu_mem_buf->data, len);

View File

@ -627,11 +627,18 @@ static int parse_args(int argc, char **argv)
//// --- Begin LibAFL code --- //// --- Begin LibAFL code ---
uint64_t libafl_load_addr(void);
int libafl_qemu_main(void); int libafl_qemu_main(void);
int libafl_qemu_run(void); int libafl_qemu_run(void);
static CPUArchState *libafl_qemu_env; static CPUArchState *libafl_qemu_env;
struct image_info libafl_image_info;
uint64_t libafl_load_addr(void) {
return libafl_image_info.load_addr;
}
__attribute__((weak)) int libafl_qemu_main(void) __attribute__((weak)) int libafl_qemu_main(void)
{ {
libafl_qemu_run(); libafl_qemu_run();
@ -649,7 +656,8 @@ int libafl_qemu_run(void)
int main(int argc, char **argv, char **envp) int main(int argc, char **argv, char **envp)
{ {
struct target_pt_regs regs1, *regs = &regs1; struct target_pt_regs regs1, *regs = &regs1;
struct image_info info1, *info = &info1; //struct image_info info1, *info = &info1;
struct image_info *info = &libafl_image_info;
struct linux_binprm bprm; struct linux_binprm bprm;
TaskState *ts; TaskState *ts;
CPUArchState *env; CPUArchState *env;