use crate::{core::mapper::MemorySegment, Result};
#[cfg(target_os = "linux")]
mod linux;
#[cfg(target_os = "windows")]
mod windows;
#[cfg(target_os = "macos")]
mod macos;
pub fn enumerate_segments() -> Result<Vec<MemorySegment>> {
cfg_if::cfg_if! {
if #[cfg(target_os = "linux")] {
linux::enumerate_segments()
} else if #[cfg(target_os = "windows")] {
windows::enumerate_segments()
} else if #[cfg(target_os = "macos")] {
macos::enumerate_segments()
} else {
Err(crate::Error::PlatformError("Unsupported platform".into()))
}
}
}
pub fn read_memory(address: usize, size: usize) -> Result<Vec<u8>> {
cfg_if::cfg_if! {
if #[cfg(target_os = "linux")] {
linux::read_memory(address, size)
} else if #[cfg(target_os = "windows")] {
windows::read_memory(address, size)
} else if #[cfg(target_os = "macos")] {
macos::read_memory(address, size)
} else {
Err(crate::Error::PlatformError("Unsupported platform".into()))
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_enumerate_segments() {
let segments = enumerate_segments();
match segments {
Ok(segs) => {
assert!(!segs.is_empty(), "Expected at least one memory segment");
}
Err(_) => {
}
}
}
}