elven-forest/uwuwind/src/identify.rs
2023-05-07 10:59:19 +02:00

36 lines
1 KiB
Rust

use std::ffi::CStr;
pub fn identify(addr: usize) -> Option<&'static CStr> {
unsafe {
let mut info: libc::Dl_info = std::mem::zeroed();
libc::dladdr(addr as _, &mut info);
if !info.dli_sname.is_null() {
let sym_name = CStr::from_ptr(info.dli_sname);
return Some(sym_name);
}
/*
let parse = |str| usize::from_str_radix(str, 16).ok();
let maps = std::fs::read_to_string("/proc/self/maps").unwrap();
maps.lines()
.filter_map(|line| {
let mut ws = line.split_ascii_whitespace();
let addr_range = ws.next()?;
let mut addr_range = addr_range.split("-");
let addr_range = (parse(addr_range.next()?)?)..(parse(addr_range.next()?)?);
if addr_range.contains(&addr) {
ws.nth(4).map(ToOwned::to_owned)
} else {
None
}
})
.next()
*/
None
}
}