pub fn get_vdso_range() -> Option<(usize, usize)> {
let proc_maps_file = std::fs::File::open("/proc/self/maps").ok()?;
use std::io::{BufRead, BufReader};
let mut lines = BufReader::new(proc_maps_file).lines().map_while(Result::ok);
let proc_maps_vdso_line = lines.find(|l| l.ends_with("[vdso]"))?;
let (start, end) = proc_maps_vdso_line.split_once(' ')?.0.split_once('-')?;
Some((
usize::from_str_radix(start, 16).ok()?,
usize::from_str_radix(end, 16).ok()?,
))
}
pub fn get_vdso_data() -> Option<&'static [u8]> {
let (start, end) = get_vdso_range()?;
let len = end.checked_sub(start)?;
Some(unsafe { core::slice::from_raw_parts(start as *const u8, len) })
}