Trait Memory

Source
pub trait Memory {
    // Required methods
    fn memory_mappings(&self) -> &[MemoryMap];
    fn read_physical(
        &self,
        addr: PhysicalAddress,
        buf: &mut [u8],
    ) -> MemoryAccessResult<()>;

    // Provided methods
    fn is_valid(&self, addr: PhysicalAddress, size: usize) -> bool { ... }
    fn search(
        &self,
        addr: PhysicalAddress,
        page_size: u64,
        finder: &Finder<'_>,
        buf: &mut [u8],
    ) -> MemoryAccessResult<Option<u64>> { ... }
}
Expand description

A trait to specify how to read physical memory from a guest

This trait defines additional optional methods for specialization

Required Methods§

Source

fn memory_mappings(&self) -> &[MemoryMap]

Source

fn read_physical( &self, addr: PhysicalAddress, buf: &mut [u8], ) -> MemoryAccessResult<()>

Provided Methods§

Source

fn is_valid(&self, addr: PhysicalAddress, size: usize) -> bool

Source

fn search( &self, addr: PhysicalAddress, page_size: u64, finder: &Finder<'_>, buf: &mut [u8], ) -> MemoryAccessResult<Option<u64>>

Search in a memory page with a finder.

A buffer is expected to avoid allocating a new one each time this function is called.

Returns the index of the needle within the page if found.

Implementations on Foreign Types§

Source§

impl<M: Memory + ?Sized> Memory for &M

Source§

fn memory_mappings(&self) -> &[MemoryMap]

Source§

fn read_physical( &self, addr: PhysicalAddress, buf: &mut [u8], ) -> MemoryAccessResult<()>

Source§

fn search( &self, addr: PhysicalAddress, page_size: u64, finder: &Finder<'_>, buf: &mut [u8], ) -> MemoryAccessResult<Option<u64>>

Source§

impl<M: Memory + ?Sized> Memory for Box<M>

Source§

fn memory_mappings(&self) -> &[MemoryMap]

Source§

fn read_physical( &self, addr: PhysicalAddress, buf: &mut [u8], ) -> MemoryAccessResult<()>

Source§

fn search( &self, addr: PhysicalAddress, page_size: u64, finder: &Finder<'_>, buf: &mut [u8], ) -> MemoryAccessResult<Option<u64>>

Source§

impl<M: Memory + ?Sized> Memory for Arc<M>

Source§

fn memory_mappings(&self) -> &[MemoryMap]

Source§

fn is_valid(&self, addr: PhysicalAddress, size: usize) -> bool

Source§

fn read_physical( &self, addr: PhysicalAddress, buf: &mut [u8], ) -> MemoryAccessResult<()>

Source§

fn search( &self, addr: PhysicalAddress, page_size: u64, finder: &Finder<'_>, buf: &mut [u8], ) -> MemoryAccessResult<Option<u64>>

Implementors§