region 2.1.2

A library for manipulating memory regions
Documentation

region

Azure build Status Cirrus build status crates.io version Documentation Language (Rust)

A Rust library for dealing with memory regions.

It is implemented using platform specific APIs (e.g VirtualQuery, VirtualLock, mprotect, mlock).

Platforms

This library has (so far) support for:

  • Windows
  • Linux & Android
  • macOS & iOS
  • FreeBSD

Installation

Add this to your Cargo.toml:

[dependencies]
region = "2.1.2"

and this to your crate root:

extern crate region;

Example

  • Cross-platform equivalents:
let data = [0xDE, 0xAD, 0xBE, 0xEF];

// Page size
let pz = region::page::size();
let pc = region::page::ceil(1234);
let pf = region::page::floor(1234);

// 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::ReadWriteExecute)?;

// ... you can also temporarily change a region's protection
let handle = region::protect_with_handle(data.as_ptr(), data.len(), Protection::ReadWriteExecute)?;

// VirtualLock | mlock
let guard = region::lock(data.as_ptr(), data.len())?;