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, Q> CachedPhysicalMemory<'a, T, Q>where
T: PhysicalMemory,
Q: CacheValidator,
impl<'a, T, Q> CachedPhysicalMemory<'a, T, Q>where
T: PhysicalMemory,
Q: CacheValidator,
Sourcepub fn new(mem: T, cache: PageCache<'a, Q>) -> CachedPhysicalMemory<'a, T, Q>
pub fn new(mem: T, cache: PageCache<'a, Q>) -> CachedPhysicalMemory<'a, T, Q>
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> CachedPhysicalMemory<'a, T, TimedCacheValidator>where
T: PhysicalMemory,
impl<'a, T> CachedPhysicalMemory<'a, T, TimedCacheValidator>where
T: PhysicalMemory,
Sourcepub fn builder(mem: T) -> CachedPhysicalMemoryBuilder<T, TimedCacheValidator>
pub fn builder(mem: T) -> CachedPhysicalMemoryBuilder<T, TimedCacheValidator>
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§fn clone(&self) -> CachedPhysicalMemory<'a, T, Q>
fn clone(&self) -> CachedPhysicalMemory<'a, T, Q>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<'cglue_a, CGlueInst, CGlueCtx, T, Q> ConnectorInstanceVtableFiller<'cglue_a, CGlueInst, CGlueCtx> for CachedPhysicalMemory<'cglue_a, T, Q>where
CGlueInst: Deref<Target = CachedPhysicalMemory<'cglue_a, T, Q>>,
CGlueCtx: ContextBounds,
T: PhysicalMemory,
Q: CacheValidator,
impl<'cglue_a, CGlueInst, CGlueCtx, T, Q> ConnectorInstanceVtableFiller<'cglue_a, CGlueInst, CGlueCtx> for CachedPhysicalMemory<'cglue_a, T, Q>where
CGlueInst: Deref<Target = CachedPhysicalMemory<'cglue_a, T, Q>>,
CGlueCtx: ContextBounds,
T: PhysicalMemory,
Q: CacheValidator,
fn fill_table( table: ConnectorInstanceVtables<'cglue_a, CGlueInst, CGlueCtx>, ) -> ConnectorInstanceVtables<'cglue_a, CGlueInst, CGlueCtx>
Source§impl<'a, T, Q> PhysicalMemory for CachedPhysicalMemory<'a, T, Q>where
T: PhysicalMemory,
Q: CacheValidator,
impl<'a, T, Q> PhysicalMemory for CachedPhysicalMemory<'a, T, Q>where
T: PhysicalMemory,
Q: CacheValidator,
fn phys_read_raw_iter( &mut self, data: MemOps<'_, '_, '_, CTup3<PhysicalAddress, Address, CSliceMut<'_, u8>>, CTup2<Address, CSliceMut<'_, u8>>>, ) -> Result<(), Error>
fn phys_write_raw_iter( &mut self, _: MemOps<'_, '_, '_, CTup3<PhysicalAddress, Address, CSliceRef<'_, u8>>, CTup2<Address, CSliceRef<'_, u8>>>, ) -> Result<(), Error>
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>( &mut self, addr: PhysicalAddress, out: &mut T, ) -> Result<(), Error>
fn phys_write<T>( &mut self, addr: PhysicalAddress, data: &T, ) -> Result<(), Error>
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> !Freeze for CachedPhysicalMemory<'a, T, Q>
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> GetWithMetadata for T
impl<T> GetWithMetadata for T
Source§type ForSelf = WithMetadata_<T, T>
type ForSelf = WithMetadata_<T, T>
WithMetadata_<Self, Self>Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<S> ROExtAcc for S
impl<S> ROExtAcc for S
Source§fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F
fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F
offset. Read moreSource§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 moreSource§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 moreSource§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 moreSource§impl<S> ROExtOps<Aligned> for S
impl<S> ROExtOps<Aligned> for S
Source§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 moreSource§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,
Source§impl<S> ROExtOps<Unaligned> for S
impl<S> ROExtOps<Unaligned> for S
Source§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 moreSource§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,
Source§impl<T> SelfOps for Twhere
T: ?Sized,
impl<T> SelfOps for Twhere
T: ?Sized,
Source§fn piped<F, U>(self, f: F) -> U
fn piped<F, U>(self, f: F) -> U
Source§fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere
F: FnOnce(&'a Self) -> U,
fn piped_ref<'a, F, U>(&'a self, f: F) -> Uwhere
F: FnOnce(&'a Self) -> U,
piped except that the function takes &Self
Useful for functions that take &Self instead of Self. Read moreSource§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.Source§fn mutated<F>(self, f: F) -> Self
fn mutated<F>(self, f: F) -> Self
Source§fn observe<F>(self, f: F) -> Self
fn observe<F>(self, f: F) -> Self
Source§fn as_ref_<T>(&self) -> &T
fn as_ref_<T>(&self) -> &T
AsRef,
using the turbofish .as_ref_::<_>() syntax. Read more