From 8627b808a0bf539c51c6aa191ea6254bbb5399b4 Mon Sep 17 00:00:00 2001 From: Andrea Fioraldi Date: Tue, 6 Jul 2021 16:43:28 +0200 Subject: [PATCH] expose exec_path to Rust --- qemu_libafl_bridge/Cargo.toml | 2 +- qemu_libafl_bridge/src/lib.rs | 8 ++++++++ qemu_libafl_bridge/src/weaks.c | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/qemu_libafl_bridge/Cargo.toml b/qemu_libafl_bridge/Cargo.toml index 5b3a052baa..9dfec96ef8 100644 --- a/qemu_libafl_bridge/Cargo.toml +++ b/qemu_libafl_bridge/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "qemu_libafl_bridge" -version = "0.3.0" +version = "0.3.1" authors = ["Andrea Fioraldi "] description = "QEMU and LibAFL bridge lib" repository = "https://github.com/AFLplusplus/qemu-libafl-bridge/" diff --git a/qemu_libafl_bridge/src/lib.rs b/qemu_libafl_bridge/src/lib.rs index fa82d23003..935b34c175 100644 --- a/qemu_libafl_bridge/src/lib.rs +++ b/qemu_libafl_bridge/src/lib.rs @@ -1,5 +1,6 @@ use core::{convert::Into, mem::transmute, ptr::copy_nonoverlapping}; use num::Num; +use std::{slice::from_raw_parts, str::from_utf8_unchecked}; pub mod amd64; pub mod x86; @@ -20,6 +21,9 @@ extern "C" { fn libafl_qemu_remove_breakpoint(addr: u64) -> i32; fn libafl_qemu_run() -> i32; + fn strlen(s: *const u8) -> usize; + + static exec_path: *const u8; static guest_base: isize; } @@ -95,6 +99,10 @@ impl QemuEmulator { unsafe { transmute(addr - guest_base) } } + pub fn exec_path(&self) -> &str { + unsafe { from_utf8_unchecked(from_raw_parts(exec_path, strlen(exec_path) + 1)) } + } + pub fn new() -> Self { Self {} } diff --git a/qemu_libafl_bridge/src/weaks.c b/qemu_libafl_bridge/src/weaks.c index 3bf7854ab6..2301b5a07d 100644 --- a/qemu_libafl_bridge/src/weaks.c +++ b/qemu_libafl_bridge/src/weaks.c @@ -31,4 +31,5 @@ __attribute__((weak)) int libafl_qemu_run() { return 0; } +__attribute__((weak)) char* exec_path = NULL; __attribute__((weak)) size_t guest_base = 0;