From 2edf778b1c21419dad0bf3b0ef487e7eaa6751f7 Mon Sep 17 00:00:00 2001 From: Romain Malmain Date: Wed, 17 Apr 2024 18:08:38 +0200 Subject: [PATCH] Add utils (#62) * add utils file * user only guard. --- include/libafl/utils.h | 7 +++++++ libafl/meson.build | 3 ++- libafl/utils.c | 24 ++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 include/libafl/utils.h create mode 100644 libafl/utils.c diff --git a/include/libafl/utils.h b/include/libafl/utils.h new file mode 100644 index 0000000000..0da201fce5 --- /dev/null +++ b/include/libafl/utils.h @@ -0,0 +1,7 @@ +#pragma once + +#include "qemu/osdep.h" + +#ifndef CONFIG_USER_ONLY +uint8_t* libafl_paddr2host(CPUState* cpu, hwaddr addr, bool is_write); +#endif diff --git a/libafl/meson.build b/libafl/meson.build index 8151b01e1b..938dfa41a7 100644 --- a/libafl/meson.build +++ b/libafl/meson.build @@ -1,7 +1,8 @@ specific_ss.add(files( 'exit.c', 'hook.c', - 'jit.c' + 'jit.c', + 'utils.c', )) specific_ss.add(when: 'CONFIG_SOFTMMU', if_true: [files( diff --git a/libafl/utils.c b/libafl/utils.c new file mode 100644 index 0000000000..95036410cb --- /dev/null +++ b/libafl/utils.c @@ -0,0 +1,24 @@ +#include "qemu/osdep.h" + +#ifndef CONFIG_USER_ONLY +#include "exec/memory.h" +#include "qemu/rcu.h" +#include "cpu.h" + +#include "libafl/utils.h" + +uint8_t* libafl_paddr2host(CPUState* cpu, hwaddr addr, bool is_write) +{ + if (addr == -1) { + return NULL; + } + + hwaddr xlat; + MemoryRegion* mr; + WITH_RCU_READ_LOCK_GUARD() { + mr = address_space_translate(cpu->as, addr, &xlat, NULL, is_write, MEMTXATTRS_UNSPECIFIED); + } + + return qemu_map_ram_ptr(mr->ram_block, xlat); +} +#endif \ No newline at end of file