Trait memflow::mem::virt_translate::VirtualTranslate3
source · pub trait VirtualTranslate3: Clone + Copy + Send {
// Required methods
fn virt_to_phys_iter<T: PhysicalMemory + ?Sized, B: SplitAtIndex, VI: Iterator<Item = CTup3<Address, Address, B>>>(
&self,
mem: &mut T,
addrs: VI,
out: &mut VtopOutputCallback<'_, B>,
out_fail: &mut VtopFailureCallback<'_, B>,
tmp_buf: &mut [MaybeUninit<u8>]
);
fn translation_table_id(&self, address: Address) -> umem;
fn arch(&self) -> ArchitectureObj;
// Provided method
fn virt_to_phys<T: PhysicalMemory>(
&self,
mem: &mut T,
addr: Address
) -> Result<PhysicalAddress> { ... }
}
Expand description
Translates virtual memory to physical using internal translation base (usually a process’ dtb)
This trait abstracts virtual address translation for a single virtual memory scope.
On x86 architectures, it is a single Address
- a CR3 register. But other architectures may
use multiple translation bases, or use a completely different translation mechanism (MIPS).
Required Methods§
fn virt_to_phys_iter<T: PhysicalMemory + ?Sized, B: SplitAtIndex, VI: Iterator<Item = CTup3<Address, Address, B>>>( &self, mem: &mut T, addrs: VI, out: &mut VtopOutputCallback<'_, B>, out_fail: &mut VtopFailureCallback<'_, B>, tmp_buf: &mut [MaybeUninit<u8>] )
fn translation_table_id(&self, address: Address) -> umem
fn arch(&self) -> ArchitectureObj
Provided Methods§
sourcefn virt_to_phys<T: PhysicalMemory>(
&self,
mem: &mut T,
addr: Address
) -> Result<PhysicalAddress>
fn virt_to_phys<T: PhysicalMemory>( &self, mem: &mut T, addr: Address ) -> Result<PhysicalAddress>
Translate a single virtual address
Examples
use memflow::mem::VirtualTranslate3;
use memflow::architecture::x86::x64;
use memflow::types::{size, umem};
let arch = x64::ARCH;
// Translate a mapped address
let res = translator.virt_to_phys(
&mut mem,
virtual_base,
);
assert!(res.is_ok());
// Translate unmapped address
let res = translator.virt_to_phys(
&mut mem,
virtual_base - 1,
);
assert!(res.is_err());
Object Safety§
This trait is not object safe.