From deb5286724d1b1421d8b354c6f0d4d23b4ba638a Mon Sep 17 00:00:00 2001 From: Alwin Berger Date: Mon, 13 Mar 2023 14:46:09 +0100 Subject: [PATCH] re-introduce native breakpoints --- include/libafl/exit.h | 5 +++++ libafl/exit.c | 18 ++++++++++++++++++ system/cpus.c | 5 ++++- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/include/libafl/exit.h b/include/libafl/exit.h index a302aa53c1..932a0f9659 100644 --- a/include/libafl/exit.h +++ b/include/libafl/exit.h @@ -62,3 +62,8 @@ void libafl_exit_request_internal(CPUState* cpu, uint64_t pc, ShutdownCause caus void libafl_exit_request_sync_backdoor(CPUState* cpu, target_ulong pc); void libafl_exit_request_breakpoint(CPUState* cpu, target_ulong pc); struct libafl_exit_reason* libafl_get_exit_reason(void); + +#ifndef CONFIG_USER_ONLY +void libafl_qemu_set_native_breakpoint(vaddr pc); +void libafl_qemu_remove_native_breakpoint(vaddr pc); +#endif diff --git a/libafl/exit.c b/libafl/exit.c index df0ab04a09..f8a50f6d74 100644 --- a/libafl/exit.c +++ b/libafl/exit.c @@ -143,3 +143,21 @@ struct libafl_exit_reason* libafl_get_exit_reason(void) return NULL; } + +#ifndef CONFIG_USER_ONLY +void libafl_qemu_set_native_breakpoint(vaddr pc) +{ + CPUState *cpu; + CPU_FOREACH(cpu) { + cpu_breakpoint_insert(cpu, pc, BP_GDB, NULL); + } +} + +void libafl_qemu_remove_native_breakpoint(vaddr pc) +{ + CPUState *cpu; + CPU_FOREACH(cpu) { + cpu_breakpoint_remove(cpu, pc, BP_GDB); + } +} +#endif \ No newline at end of file diff --git a/system/cpus.c b/system/cpus.c index de8fb01b5a..e51bdff2f8 100644 --- a/system/cpus.c +++ b/system/cpus.c @@ -333,7 +333,10 @@ void cpu_handle_guest_debug(CPUState *cpu) cpu_single_step(cpu, 0); } } else { - gdb_set_stop_cpu(cpu); + /* Begin LibAFL changes */ + // With LibAFL Breakpoints there is no gdb attached. + // gdb_set_stop_cpu(cpu); + /* End LibAFL changes */ qemu_system_debug_request(); cpu->stopped = true; }