WorksButNotTested db1d38eeb6
LibAFL_QEMU/librasan: Add support for reading environment (#3241)
* Add support for reading environment

* Fix clippy

* Review fixes
2025-05-20 21:48:08 +02:00

62 lines
1.7 KiB
Rust

#[cfg(test)]
#[cfg(feature = "libc")]
mod tests {
use core::ffi::{CStr, c_int, c_void};
use asan::{
GuestAddr,
symbols::{
Function, Symbols,
dlsym::{DlSymSymbols, LookupTypeDefault},
},
};
use libc::{off_t, size_t};
#[derive(Debug)]
struct FunctionMmap;
impl Function for FunctionMmap {
type Func =
unsafe extern "C" fn(*mut c_void, size_t, c_int, c_int, c_int, off_t) -> *mut c_void;
const NAME: &'static CStr = c"mmap";
}
#[derive(Debug)]
struct FunctionMunmap;
impl Function for FunctionMunmap {
type Func = unsafe extern "C" fn(*mut c_void, size_t) -> c_int;
const NAME: &'static CStr = c"munmap";
}
type DlSym = DlSymSymbols<LookupTypeDefault>;
#[test]
fn test_dlsym() {
use asan::symbols::FunctionPointer;
let mmap = DlSym::lookup(c"mmap").unwrap();
let mmap2 = DlSym::lookup(c"mmap").unwrap();
assert_eq!(mmap, mmap2);
let fnmmap = FunctionMmap::as_ptr(mmap).unwrap();
let mapping = unsafe {
fnmmap(
core::ptr::null_mut(),
4096,
libc::PROT_READ | libc::PROT_WRITE,
libc::MAP_PRIVATE | libc::MAP_ANONYMOUS | libc::MAP_NORESERVE,
-1,
0,
)
};
let addr = mapping as GuestAddr;
assert!(addr & 0xfff == 0);
let munmap = DlSym::lookup(c"munmap").unwrap();
let munmap2 = DlSym::lookup(c"munmap").unwrap();
assert_eq!(munmap, munmap2);
let fnmunmap = FunctionMunmap::as_ptr(munmap).unwrap();
let ret = unsafe { fnmunmap(mapping, 4096) };
assert!(ret == 0);
}
}