A cross-platform Rust API for manipulating memory regions
Its underlying implementation uses platform specific APIs (e.g
VirtualQuery
, VirtualLock
, mprotect
, mlock
).
This library provides CI for these targets:
- Linux
aarch64-linux-android
armv7-unknown-linux-gnueabihf
i686-unknown-linux-gnu
mips-unknown-linux-gnu
x86_64-unknown-linux-gnu
x86_64-unknown-linux-musl
- Windows
i686-pc-windows-gnu
i686-pc-windows-msvc
x86_64-pc-windows-gnu
x86_64-pc-windows-msvc
- macOS
x86_64-apple-darwin
- FreeBSD
x86_64-unknown-freebsd
Add this to your Cargo.toml
:
[dependencies]
region = "2.2.0"
and this to your crate root:
extern crate region;
- Cross-platform equivalents:
let data = [0xDE, 0xAD, 0xBE, 0xEF];
// Page size
let pz = region::page::size();
// VirtualQuery | '/proc/self/maps'
let q = region::query(data.as_ptr())?;
let qr = region::query_range(data.as_ptr(), data.len())?;
// VirtualProtect | mprotect
region::protect(data.as_ptr(), data.len(), Protection::READ_WRITE_EXECUTE)?;
// ... you can also temporarily change a region's protection
let handle = region::protect_with_handle(data.as_ptr(), data.len(), Protection::READ_WRITE_EXECUTE)?;
// VirtualLock | mlock
let guard = region::lock(data.as_ptr(), data.len())?;