pub struct VirtualDma<T, V, D> { /* private fields */ }
Expand description

The VirtualDma struct provides a default implementation to access virtual memory from user provided PhysicalMemory and VirtualTranslate2 objects.

This struct implements MemoryView and allows the user to access the virtual memory of a process.

Implementations

Constructs a VirtualDma object from user supplied architectures and DTB. It creates a default VirtualTranslate2 object using the DirectTranslate struct.

If you want to use a cache for translating virtual to physical memory consider using the VirtualDma::with_vat() function and supply your own VirtualTranslate2 object.

Examples

Constructing a VirtualDma object with a given dtb and using it to read:

use memflow::types::Address;
use memflow::architecture::x86::x64;
use memflow::mem::{PhysicalMemory, VirtualTranslate2, MemoryView, VirtualDma};
use memflow::cglue::Fwd;

fn read(phys_mem: Fwd<&mut impl PhysicalMemory>, vat: &mut impl VirtualTranslate2, dtb: Address, read_addr: Address) {
    let arch = x64::ARCH;
    let translator = x64::new_translator(dtb);

    let mut virt_mem = VirtualDma::new(phys_mem, arch, translator);

    let mut addr = 0u64;
    virt_mem.read_into(read_addr, &mut addr).unwrap();
    println!("addr: {:x}", addr);
}

This function constructs a VirtualDma instance with a user supplied VirtualTranslate2 object. It can be used when working with cached virtual to physical translations such as a Tlb.

Examples

Constructing a VirtualDma object with VAT and using it to read:

use memflow::types::Address;
use memflow::architecture::x86::x64;
use memflow::mem::{PhysicalMemory, VirtualTranslate2, MemoryView, VirtualDma};
use memflow::cglue::Fwd;

fn read(phys_mem: Fwd<&mut impl PhysicalMemory>, vat: impl VirtualTranslate2, dtb: Address, read_addr: Address) {
    let arch = x64::ARCH;
    let translator = x64::new_translator(dtb);

    let mut virt_mem = VirtualDma::with_vat(phys_mem, arch, translator, vat);

    let mut addr = 0u64;
    virt_mem.read_into(read_addr, &mut addr).unwrap();
    println!("addr: {:x}", addr);
}

Returns the architecture of the system. The system architecture is used for virtual to physical translations.

Returns the architecture of the process for this context. The process architecture is mainly used to determine pointer sizes.

Returns the Directory Table Base of this process.

A wrapper around read_addr64 and read_addr32 that will use the pointer size of this context’s process. TODO: do this in virt mem

Consumes this VirtualDma object, returning the underlying memory and vat objects

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Read arbitrary amount of data. Read more

Write arbitrary amount of data. Read more

Reads a fixed length string from the target. Read more

Reads a variable length string with a length of up to specified amount from the target. Read more

Reads a variable length string with up to 4kb length from the target. Read more

Attempt to translate a physical address into a virtual one. Read more

Retrieve all virtual address that map into a given physical address.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

The owned type, stored in RCow::Owned

The borrowed type, stored in RCow::Borrowed

Returns the argument unchanged.

This is always WithMetadata_<Self, Self>

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Gets a reference to a field, determined by offset. Read more

Gets a muatble reference to a field, determined by offset. Read more

Gets a const pointer to a field, the field is determined by offset. Read more

Gets a mutable pointer to a field, determined by offset. Read more

Replaces a field (determined by offset) with value, returning the previous value of the field. Read more

Swaps a field (determined by offset) with the same field in right. Read more

Gets a copy of a field (determined by offset). The field is determined by offset. Read more

Replaces a field (determined by offset) with value, returning the previous value of the field. Read more

Swaps a field (determined by offset) with the same field in right. Read more

Gets a copy of a field (determined by offset). The field is determined by offset. Read more

Compares the address of self with the address of other. Read more

Emulates the pipeline operator, allowing method syntax in more places. Read more

The same as piped except that the function takes &Self Useful for functions that take &Self instead of Self. Read more

The same as piped, except that the function takes &mut Self. Useful for functions that take &mut Self instead of Self. Read more

Mutates self using a closure taking self by mutable reference, passing it along the method chain. Read more

Observes the value of self, passing it along unmodified. Useful in long method chains. Read more

Performs a conversion with Into. using the turbofish .into_::<_>() syntax. Read more

Performs a reference to reference conversion with AsRef, using the turbofish .as_ref_::<_>() syntax. Read more

Performs a mutable reference to mutable reference conversion with AsMut, using the turbofish .as_mut_::<_>() syntax. Read more

Drops self using method notation. Alternative to std::mem::drop. Read more

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

Transmutes the element type of this pointer.. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

This is always Self.

Converts a value back to the original type.

Converts a reference back to the original type.

Converts a mutable reference back to the original type.

Converts a box back to the original type.

Converts an Arc back to the original type. Read more

Converts an Rc back to the original type. Read more

Converts a value back to the original type.

Converts a reference back to the original type.

Converts a mutable reference back to the original type.

Converts a box back to the original type.

Converts an Arc back to the original type.

Converts an Rc back to the original type.