Struct memflow::mem::phys_mem::middleware::cache::CachedPhysicalMemory
source · pub struct CachedPhysicalMemory<'a, T, Q> { /* private fields */ }
Expand description
The cache object that can use as a drop-in replacement for any Connector.
Since this cache implements PhysicalMemory
it can be used as a replacement
in all structs and functions that require a PhysicalMemory
object.
Implementations§
source§impl<'a, T: PhysicalMemory, Q: CacheValidator> CachedPhysicalMemory<'a, T, Q>
impl<'a, T: PhysicalMemory, Q: CacheValidator> CachedPhysicalMemory<'a, T, Q>
sourcepub fn new(mem: T, cache: PageCache<'a, Q>) -> Self
pub fn new(mem: T, cache: PageCache<'a, Q>) -> Self
Constructs a new cache based on the given PageCache
.
This function is used when manually constructing a cache inside of the memflow crate itself.
For general usage it is advised to just use the builder to construct the cache.
sourcepub fn into_inner(self) -> T
pub fn into_inner(self) -> T
Consumes self and returns the containing memory object.
This function can be useful in case the ownership over the memory object has been given to the cache
when it was being constructed.
It will destroy the self
and return back the ownership of the underlying memory object.
Examples
use memflow::architecture::x86::x64;
use memflow::mem::{PhysicalMemory, CachedPhysicalMemory, MemoryView};
fn build<T: PhysicalMemory>(mem: T) -> T {
let mut cache = CachedPhysicalMemory::builder(mem)
.arch(x64::ARCH)
.build()
.unwrap();
// use the cache...
let value: u64 = cache.phys_view().read(0.into()).unwrap();
assert_eq!(value, MAGIC_VALUE);
// retrieve ownership of mem and return it back
cache.into_inner()
}
source§impl<'a, T: PhysicalMemory> CachedPhysicalMemory<'a, T, DefaultCacheValidator>
impl<'a, T: PhysicalMemory> CachedPhysicalMemory<'a, T, DefaultCacheValidator>
sourcepub fn builder(mem: T) -> CachedPhysicalMemoryBuilder<T, DefaultCacheValidator>
pub fn builder(mem: T) -> CachedPhysicalMemoryBuilder<T, DefaultCacheValidator>
Returns a new builder for this cache with default settings.
Trait Implementations§
source§impl<'a, T, Q> Clone for CachedPhysicalMemory<'a, T, Q>
impl<'a, T, Q> Clone for CachedPhysicalMemory<'a, T, Q>
source§impl<'cglue_a, CGlueInst: Deref<Target = CachedPhysicalMemory<'cglue_a, T, Q>>, CGlueCtx: ContextBounds, T: PhysicalMemory, Q: CacheValidator> ConnectorInstanceVtableFiller<'cglue_a, CGlueInst, CGlueCtx> for CachedPhysicalMemory<'cglue_a, T, Q>
impl<'cglue_a, CGlueInst: Deref<Target = CachedPhysicalMemory<'cglue_a, T, Q>>, CGlueCtx: ContextBounds, T: PhysicalMemory, Q: CacheValidator> ConnectorInstanceVtableFiller<'cglue_a, CGlueInst, CGlueCtx> for CachedPhysicalMemory<'cglue_a, T, Q>
fn fill_table( table: ConnectorInstanceVtables<'cglue_a, CGlueInst, CGlueCtx> ) -> ConnectorInstanceVtables<'cglue_a, CGlueInst, CGlueCtx>
source§impl<'a, T: PhysicalMemory, Q: CacheValidator> PhysicalMemory for CachedPhysicalMemory<'a, T, Q>
impl<'a, T: PhysicalMemory, Q: CacheValidator> PhysicalMemory for CachedPhysicalMemory<'a, T, Q>
fn phys_read_raw_iter( &mut self, data: PhysicalReadMemOps<'_, '_, '_, '_> ) -> Result<()>
fn phys_write_raw_iter( &mut self, _: PhysicalWriteMemOps<'_, '_, '_, '_> ) -> Result<()>
source§fn metadata(&self) -> PhysicalMemoryMetadata
fn metadata(&self) -> PhysicalMemoryMetadata
source§fn set_mem_map(&mut self, mem_map: &[PhysicalMemoryMapping])
fn set_mem_map(&mut self, mem_map: &[PhysicalMemoryMapping])
fn phys_read_into<T: Pod + ?Sized>(
&mut self,
addr: PhysicalAddress,
out: &mut T
) -> Result<()>where
Self: Sized,
fn phys_write<T: Pod + ?Sized>(
&mut self,
addr: PhysicalAddress,
data: &T
) -> Result<()>where
Self: Sized,
fn into_phys_view(self) -> PhysicalMemoryView<Self>where
Self: Sized,
fn phys_view(&mut self) -> PhysicalMemoryView<Fwd<&mut Self>>where
Self: Sized,
fn into_mem_view(self) -> PhysicalMemoryView<Self>where
Self: Sized,
fn mem_view(&mut self) -> PhysicalMemoryView<Fwd<&mut Self>>where
Self: Sized,
Auto Trait Implementations§
impl<'a, T, Q> !RefUnwindSafe for CachedPhysicalMemory<'a, T, Q>
impl<'a, T, Q> Send for CachedPhysicalMemory<'a, T, Q>where
T: Send,
impl<'a, T, Q> !Sync for CachedPhysicalMemory<'a, T, Q>
impl<'a, T, Q> Unpin for CachedPhysicalMemory<'a, T, Q>
impl<'a, T, Q> !UnwindSafe for CachedPhysicalMemory<'a, T, Q>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<'a, T> BorrowOwned<'a> for Twhere
T: 'a + Clone,
impl<'a, T> BorrowOwned<'a> for Twhere
T: 'a + Clone,
fn r_borrow( this: &'a <T as BorrowOwned<'a>>::ROwned ) -> <T as BorrowOwned<'a>>::RBorrowed
fn r_to_owned( this: <T as BorrowOwned<'a>>::RBorrowed ) -> <T as BorrowOwned<'a>>::ROwned
fn deref_borrowed(this: &<T as BorrowOwned<'a>>::RBorrowed) -> &T
fn deref_owned(this: &<T as BorrowOwned<'a>>::ROwned) -> &T
fn from_cow_borrow(this: &'a T) -> <T as BorrowOwned<'a>>::RBorrowed
fn from_cow_owned(this: <T as ToOwned>::Owned) -> <T as BorrowOwned<'a>>::ROwned
fn into_cow_borrow(this: <T as BorrowOwned<'a>>::RBorrowed) -> &'a T
fn into_cow_owned(this: <T as BorrowOwned<'a>>::ROwned) -> <T as ToOwned>::Owned
source§impl<T> GetWithMetadata for T
impl<T> GetWithMetadata for T
§type ForSelf = WithMetadata_<T, T>
type ForSelf = WithMetadata_<T, T>
WithMetadata_<Self, Self>
§impl<S> ROExtAcc for S
impl<S> ROExtAcc for S
§fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F
fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F
offset
. Read more§fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F
fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F
offset
. Read more§fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F
fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F
offset
. Read more§fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F
fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F
offset
. Read more§impl<S> ROExtOps<Aligned> for S
impl<S> ROExtOps<Aligned> for S
§fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F
fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Aligned>, value: F) -> F
offset
) with value
,
returning the previous value of the field. Read more§fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere
F: Copy,
fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> Fwhere
F: Copy,
§impl<S> ROExtOps<Unaligned> for S
impl<S> ROExtOps<Unaligned> for S
§fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F
fn f_replace<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, value: F) -> F
offset
) with value
,
returning the previous value of the field. Read more§fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere
F: Copy,
fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> Fwhere
F: Copy,
§impl<T> SelfOps for Twhere
T: ?Sized,
impl<T> SelfOps for Twhere
T: ?Sized,
§fn piped<F, U>(self, f: F) -> U
fn piped<F, U>(self, f: F) -> U
§fn piped_ref<'a, F, U>(&'a self, f: F) -> U
fn piped_ref<'a, F, U>(&'a self, f: F) -> U
piped
except that the function takes &Self
Useful for functions that take &Self
instead of Self
. Read more§fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere
F: FnOnce(&'a mut Self) -> U,
fn piped_mut<'a, F, U>(&'a mut self, f: F) -> Uwhere
F: FnOnce(&'a mut Self) -> U,
piped
, except that the function takes &mut Self
.
Useful for functions that take &mut Self
instead of Self
.§fn mutated<F>(self, f: F) -> Self
fn mutated<F>(self, f: F) -> Self
§fn observe<F>(self, f: F) -> Self
fn observe<F>(self, f: F) -> Self
§fn as_ref_<T>(&self) -> &T
fn as_ref_<T>(&self) -> &T
AsRef
,
using the turbofish .as_ref_::<_>()
syntax. Read more