Introduce libafl_breakpoint_cpu

This commit is contained in:
Andrea Fioraldi 2022-11-22 17:39:16 +01:00
parent f26a5ca613
commit 6db12fe4df
3 changed files with 24 additions and 1 deletions

View File

@ -128,13 +128,16 @@ void libafl_load_qemu_snapshot(char *name, bool sync)
int libafl_qemu_break_asap = 0; int libafl_qemu_break_asap = 0;
CPUState* libafl_breakpoint_cpu;
void libafl_qemu_trigger_breakpoint(CPUState* cpu); void libafl_qemu_trigger_breakpoint(CPUState* cpu);
void libafl_qemu_trigger_breakpoint(CPUState* cpu) void libafl_qemu_trigger_breakpoint(CPUState* cpu)
{ {
#ifndef CONFIG_USER_ONLY #ifndef CONFIG_USER_ONLY
qemu_system_debug_request(); libafl_breakpoint_cpu = cpu;
cpu->stopped = true; cpu->stopped = true;
qemu_system_debug_request();
#else #else
if (cpu->running) { if (cpu->running) {
cpu->exception_index = EXCP_LIBAFL_BP; cpu->exception_index = EXCP_LIBAFL_BP;

7
cpu.c
View File

@ -98,6 +98,8 @@ int libafl_qemu_remove_hook(size_t num, int invalidate);
struct libafl_hook* libafl_search_hook(target_ulong addr); struct libafl_hook* libafl_search_hook(target_ulong addr);
void libafl_flush_jit(void); void libafl_flush_jit(void);
extern CPUState* libafl_breakpoint_cpu;
/* /*
void* libafl_qemu_g2h(CPUState *cpu, target_ulong x); void* libafl_qemu_g2h(CPUState *cpu, target_ulong x);
target_ulong libafl_qemu_h2g(CPUState *cpu, void* x); target_ulong libafl_qemu_h2g(CPUState *cpu, void* x);
@ -149,6 +151,11 @@ int libafl_qemu_num_cpus(void)
CPUState* libafl_qemu_current_cpu(void) CPUState* libafl_qemu_current_cpu(void)
{ {
#ifndef CONFIG_USER_ONLY
if (current_cpu == NULL) {
return libafl_breakpoint_cpu;
}
#endif
return current_cpu; return current_cpu;
} }

View File

@ -717,8 +717,21 @@ int vm_prepare_start(bool step_pending)
return 0; return 0;
} }
//// --- Begin LibAFL code ---
extern CPUState* libafl_breakpoint_cpu;
//// --- End LibAFL code ---
void vm_start(void) void vm_start(void)
{ {
//// --- Begin LibAFL code ---
libafl_breakpoint_cpu = NULL; // Rely on current_cpu in the hooks
//// --- End LibAFL code ---
if (!vm_prepare_start(false)) { if (!vm_prepare_start(false)) {
resume_all_vcpus(); resume_all_vcpus();
} }