#[repr(transparent)]pub struct Address(_);
Expand description
This type represents a address on the target system.
It internally holds a umem
value but can also be used
when working in 32-bit environments.
This type will not handle overflow for 32-bit or 64-bit addresses / lengths.
Implementations
sourceimpl Address
impl Address
sourcepub const NULL: Address
pub const NULL: Address
A address with the value of zero.
Examples
use memflow::types::Address;
println!("address: {}", Address::NULL);
sourcepub const INVALID: Address
pub const INVALID: Address
A address with an invalid value.
Examples
use memflow::types::Address;
println!("address: {}", Address::INVALID);
sourcepub const fn null() -> Self
pub const fn null() -> Self
Returns an address with a value of zero.
Examples
use memflow::types::Address;
println!("address: {}", Address::null());
sourcepub fn bit_mask<T: TryInto<u8>>(bits: Range<T>) -> Address
pub fn bit_mask<T: TryInto<u8>>(bits: Range<T>) -> Address
Creates a a bit mask. This function accepts an (half-open) range excluding the end bit from the mask.
Examples
use memflow::types::Address;
println!("mask: {}", Address::bit_mask(0..11));
sourcepub const fn bit_mask_u8(bits: Range<u8>) -> Address
pub const fn bit_mask_u8(bits: Range<u8>) -> Address
Creates a a bit mask (const version with u8 range). This function accepts an (half-open) range excluding the end bit from the mask.
Examples
use memflow::types::Address;
println!("mask: {}", Address::bit_mask(0..11));
sourcepub const fn is_null(self) -> bool
pub const fn is_null(self) -> bool
Checks wether the address is zero or not.
Examples
use memflow::types::Address;
assert_eq!(Address::null().is_null(), true);
assert_eq!(Address::from(0x1000u64).is_null(), false);
sourcepub fn non_null(self) -> Option<Address>
pub fn non_null(self) -> Option<Address>
Converts the address to an Option that is None when it is null
Examples
use memflow::types::Address;
assert_eq!(Address::null().non_null(), None);
assert_eq!(Address::from(0x1000u64).non_null(), Some(Address::from(0x1000)));
sourcepub const fn invalid() -> Self
pub const fn invalid() -> Self
Returns an address with a invalid value.
Examples
use memflow::types::Address;
println!("address: {}", Address::invalid());
sourcepub const fn is_valid(self) -> bool
pub const fn is_valid(self) -> bool
Checks wether the address is valid or not.
Examples
use memflow::types::Address;
assert_eq!(Address::invalid().is_valid(), false);
assert_eq!(Address::from(0x1000u64).is_valid(), true);
sourcepub const fn to_umem(self) -> umem
pub const fn to_umem(self) -> umem
Converts the address into a u64
value.
Examples
use memflow::types::{Address, umem};
let addr = Address::from(0x1000u64);
let addr_umem: umem = addr.to_umem();
assert_eq!(addr_umem, 0x1000);
sourcepub const fn as_mem_aligned(self, mem_size: umem) -> Address
pub const fn as_mem_aligned(self, mem_size: umem) -> Address
Aligns the containing address to the given page size. It returns the base address of the containing page.
Examples
use memflow::types::{Address, mem};
let addr = Address::from(0x1234);
let aligned = addr.as_mem_aligned(mem::kb(4));
assert_eq!(aligned, Address::from(0x1000));
pub const fn as_page_aligned(self, page_size: usize) -> Address
sourcepub const fn bit_at(self, idx: u8) -> bool
pub const fn bit_at(self, idx: u8) -> bool
Returns true or false wether the bit at the specified index is either 0 or 1. An index of 0 will check the least significant bit.
Examples
use memflow::types::Address;
let addr = Address::from(2);
let bit = addr.bit_at(1);
assert_eq!(bit, true);
sourcepub fn extract_bits<T: TryInto<u8>>(self, bits: Range<T>) -> Address
pub fn extract_bits<T: TryInto<u8>>(self, bits: Range<T>) -> Address
Extracts the given range of bits by applying a corresponding bitmask. This function accepts an (half-open) range excluding the end bit from the mask.
Examples
use memflow::types::Address;
let addr = Address::from(123456789);
println!("bits[0..2] = {}", addr.extract_bits(0..2));
sourcepub const fn wrapping_add(self, other: Self) -> Self
pub const fn wrapping_add(self, other: Self) -> Self
Wrapping (modular) addition. Computes self + rhs
,
wrapping around at the boundary of the type.
sourcepub const fn wrapping_sub(self, other: Self) -> Self
pub const fn wrapping_sub(self, other: Self) -> Self
Wrapping (modular) subtraction. Computes self - rhs
,
wrapping around at the boundary of the type.
Trait Implementations
sourceimpl<'a, T: Into<umem> + Copy> Add<&'a T> for Address
impl<'a, T: Into<umem> + Copy> Add<&'a T> for Address
Adds any compatible type reference to Address
sourceimpl AddAssign<i16> for Address
impl AddAssign<i16> for Address
sourcefn add_assign(&mut self, other: i16)
fn add_assign(&mut self, other: i16)
Performs the +=
operation. Read more
sourceimpl AddAssign<i32> for Address
impl AddAssign<i32> for Address
sourcefn add_assign(&mut self, other: i32)
fn add_assign(&mut self, other: i32)
Performs the +=
operation. Read more
sourceimpl AddAssign<i64> for Address
impl AddAssign<i64> for Address
sourcefn add_assign(&mut self, other: i64)
fn add_assign(&mut self, other: i64)
Performs the +=
operation. Read more
sourceimpl AddAssign<i8> for Address
impl AddAssign<i8> for Address
sourcefn add_assign(&mut self, other: i8)
fn add_assign(&mut self, other: i8)
Performs the +=
operation. Read more
sourceimpl AddAssign<isize> for Address
impl AddAssign<isize> for Address
sourcefn add_assign(&mut self, other: isize)
fn add_assign(&mut self, other: isize)
Performs the +=
operation. Read more
sourceimpl AddAssign<u16> for Address
impl AddAssign<u16> for Address
sourcefn add_assign(&mut self, other: u16)
fn add_assign(&mut self, other: u16)
Performs the +=
operation. Read more
sourceimpl AddAssign<u32> for Address
impl AddAssign<u32> for Address
sourcefn add_assign(&mut self, other: u32)
fn add_assign(&mut self, other: u32)
Performs the +=
operation. Read more
sourceimpl AddAssign<u64> for Address
impl AddAssign<u64> for Address
sourcefn add_assign(&mut self, other: u64)
fn add_assign(&mut self, other: u64)
Performs the +=
operation. Read more
sourceimpl AddAssign<u8> for Address
impl AddAssign<u8> for Address
sourcefn add_assign(&mut self, other: u8)
fn add_assign(&mut self, other: u8)
Performs the +=
operation. Read more
sourceimpl AddAssign<usize> for Address
impl AddAssign<usize> for Address
sourcefn add_assign(&mut self, other: usize)
fn add_assign(&mut self, other: usize)
Performs the +=
operation. Read more
sourceimpl Default for Address
impl Default for Address
Returns a address with a value of zero.
Examples
use memflow::types::Address;
assert_eq!(Address::default().is_null(), true);
sourceimpl<'de> Deserialize<'de> for Address
impl<'de> Deserialize<'de> for Address
sourcefn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
sourceimpl From<Address> for PhysicalAddress
impl From<Address> for PhysicalAddress
Converts a PhysicalAddress
into a Address
.
sourceimpl From<PhysicalAddress> for Address
impl From<PhysicalAddress> for Address
Converts a PhysicalAddress
into a Address
.
sourcefn from(address: PhysicalAddress) -> Self
fn from(address: PhysicalAddress) -> Self
Performs the conversion.
sourceimpl<U: PrimitiveAddress, T: ?Sized> From<Pointer<U, T>> for Address
impl<U: PrimitiveAddress, T: ?Sized> From<Pointer<U, T>> for Address
Converts any Pointer
into an Address.
sourceimpl<U: PrimitiveAddress> From<U> for Address
impl<U: PrimitiveAddress> From<U> for Address
Converts any PrimitiveAddress
into an Address.
sourceimpl GetStaticEquivalent_ for Address
impl GetStaticEquivalent_ for Address
type StaticEquivalent = _static_Address
sourceimpl MmuTranslationBase for Address
impl MmuTranslationBase for Address
sourcefn get_pt_by_virt_addr(&self, _: Address) -> Address
fn get_pt_by_virt_addr(&self, _: Address) -> Address
Retrieves page table address by virtual address
sourcefn get_pt_by_index(&self, idx: usize) -> (Address, usize)
fn get_pt_by_index(&self, idx: usize) -> (Address, usize)
Retrieves page table address, and its index by index within
For instance, on Arm index 257 would return kernel page table
address, and index 1. On X86, however, this is a no-op that returns
underlying page table Address and idx
. Read more
sourcefn pt_count(&self) -> usize
fn pt_count(&self) -> usize
Retrieves number of page tables used by translation base. 1 on X86, 1-2 on Arm (Win32 Arm merges both page tables) Read more
fn virt_addr_filter<B>(
&self,
spec: &ArchMmuSpec,
addr: MemData<Address, B>,
work_group: (&mut TranslationChunk<Self>, &mut MVec<'_, TranslateData<B>>),
out_fail: &mut VtopFailureCallback<'_, B>
) where
B: SplitAtIndex,
fn fill_init_chunk<VI, B>(
&self,
spec: &ArchMmuSpec,
out_fail: &mut VtopFailureCallback<'_, B>,
addrs: &mut VI,
(next_work_addrs, tmp_addrs): (&mut MVec<'_, TranslateData<B>>, &mut MVec<'_, TranslateData<B>>),
work_vecs: &mut (MVec<'_, TranslationChunk<Address>>, MVec<'_, TranslateData<B>>),
wait_vecs: &mut (MVec<'_, TranslationChunk<Address>>, MVec<'_, TranslateData<B>>)
) where
VI: Iterator<Item = MemData<Address, B>>,
B: SplitAtIndex,
sourceimpl Ord for Address
impl Ord for Address
sourceimpl PartialOrd<Address> for Address
impl PartialOrd<Address> for Address
sourcefn partial_cmp(&self, other: &Address) -> Option<Ordering>
fn partial_cmp(&self, other: &Address) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
1.0.0 · sourcefn lt(&self, other: &Rhs) -> bool
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
1.0.0 · sourcefn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
sourceimpl StableAbi for Address
impl StableAbi for Address
type IsNonZeroType = <umem as __StableAbi>::IsNonZeroType
type IsNonZeroType = <umem as __StableAbi>::IsNonZeroType
Whether this type has a single invalid bit-pattern. Read more
sourceconst LAYOUT: &'static TypeLayout
const LAYOUT: &'static TypeLayout
The layout of the type provided by implementors.
sourceconst ABI_CONSTS: AbiConsts
const ABI_CONSTS: AbiConsts
const
-equivalents of the associated types.
sourceimpl<'a, T: Into<umem> + Copy> Sub<&'a T> for Address
impl<'a, T: Into<umem> + Copy> Sub<&'a T> for Address
Subtracts any compatible type reference to Address
sourceimpl Sub<Address> for Address
impl Sub<Address> for Address
Subtracts a Address
from a Address
resulting in a umem
.
Examples
use memflow::types::Address;
assert_eq!(Address::from(10) - 5, Address::from(5));
sourceimpl SubAssign<i16> for Address
impl SubAssign<i16> for Address
sourcefn sub_assign(&mut self, other: i16)
fn sub_assign(&mut self, other: i16)
Performs the -=
operation. Read more
sourceimpl SubAssign<i32> for Address
impl SubAssign<i32> for Address
sourcefn sub_assign(&mut self, other: i32)
fn sub_assign(&mut self, other: i32)
Performs the -=
operation. Read more
sourceimpl SubAssign<i64> for Address
impl SubAssign<i64> for Address
sourcefn sub_assign(&mut self, other: i64)
fn sub_assign(&mut self, other: i64)
Performs the -=
operation. Read more
sourceimpl SubAssign<i8> for Address
impl SubAssign<i8> for Address
sourcefn sub_assign(&mut self, other: i8)
fn sub_assign(&mut self, other: i8)
Performs the -=
operation. Read more
sourceimpl SubAssign<isize> for Address
impl SubAssign<isize> for Address
sourcefn sub_assign(&mut self, other: isize)
fn sub_assign(&mut self, other: isize)
Performs the -=
operation. Read more
sourceimpl SubAssign<u16> for Address
impl SubAssign<u16> for Address
sourcefn sub_assign(&mut self, other: u16)
fn sub_assign(&mut self, other: u16)
Performs the -=
operation. Read more
sourceimpl SubAssign<u32> for Address
impl SubAssign<u32> for Address
sourcefn sub_assign(&mut self, other: u32)
fn sub_assign(&mut self, other: u32)
Performs the -=
operation. Read more
sourceimpl SubAssign<u64> for Address
impl SubAssign<u64> for Address
sourcefn sub_assign(&mut self, other: u64)
fn sub_assign(&mut self, other: u64)
Performs the -=
operation. Read more
sourceimpl SubAssign<u8> for Address
impl SubAssign<u8> for Address
sourcefn sub_assign(&mut self, other: u8)
fn sub_assign(&mut self, other: u8)
Performs the -=
operation. Read more
sourceimpl SubAssign<usize> for Address
impl SubAssign<usize> for Address
sourcefn sub_assign(&mut self, other: usize)
fn sub_assign(&mut self, other: usize)
Performs the -=
operation. Read more
impl Copy for Address
impl Eq for Address
impl StructuralEq for Address
impl StructuralPartialEq for Address
Auto Trait Implementations
impl RefUnwindSafe for Address
impl Send for Address
impl Sync for Address
impl Unpin for Address
impl UnwindSafe for Address
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<'a, T> BorrowOwned<'a> for T where
T: 'a + Clone,
impl<'a, T> BorrowOwned<'a> for T where
T: 'a + Clone,
type ROwned = T
type ROwned = T
The owned type, stored in RCow::Owned
pub fn r_borrow(
this: &'a <T as BorrowOwned<'a>>::ROwned
) -> <T as BorrowOwned<'a>>::RBorrowed
pub fn r_to_owned(
this: <T as BorrowOwned<'a>>::RBorrowed
) -> <T as BorrowOwned<'a>>::ROwned
pub fn deref_borrowed(this: &<T as BorrowOwned<'a>>::RBorrowed) -> &T
pub fn deref_owned(this: &<T as BorrowOwned<'a>>::ROwned) -> &T
pub fn from_cow_borrow(this: &'a T) -> <T as BorrowOwned<'a>>::RBorrowed
pub fn from_cow_owned(
this: <T as ToOwned>::Owned
) -> <T as BorrowOwned<'a>>::ROwned
pub fn into_cow_borrow(this: <T as BorrowOwned<'a>>::RBorrowed) -> &'a T
pub fn into_cow_owned(
this: <T as BorrowOwned<'a>>::ROwned
) -> <T as ToOwned>::Owned
sourceimpl<T> GetWithMetadata for T
impl<T> GetWithMetadata for T
type ForSelf = WithMetadata_<T, T>
type ForSelf = WithMetadata_<T, T>
This is always WithMetadata_<Self, Self>
impl<S> ROExtAcc for S
impl<S> ROExtAcc for S
pub fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F
pub fn f_get<F>(&self, offset: FieldOffset<S, F, Aligned>) -> &F
Gets a reference to a field, determined by offset
. Read more
pub fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F
pub fn f_get_mut<F>(&mut self, offset: FieldOffset<S, F, Aligned>) -> &mut F
Gets a muatble reference to a field, determined by offset
. Read more
pub fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F
pub fn f_get_ptr<F, A>(&self, offset: FieldOffset<S, F, A>) -> *const F
Gets a const pointer to a field,
the field is determined by offset
. Read more
pub fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F
pub fn f_get_mut_ptr<F, A>(&mut self, offset: FieldOffset<S, F, A>) -> *mut F
Gets a mutable pointer to a field, determined by offset
. Read more
impl<S> ROExtOps<Aligned> for S
impl<S> ROExtOps<Aligned> for S
pub fn f_replace<F>(
&mut self,
offset: FieldOffset<S, F, Aligned>,
value: F
) -> F
pub fn f_replace<F>(
&mut self,
offset: FieldOffset<S, F, Aligned>,
value: F
) -> F
Replaces a field (determined by offset
) with value
,
returning the previous value of the field. Read more
pub fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Aligned>, right: &mut S)
pub fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Aligned>, right: &mut S)
Swaps a field (determined by offset
) with the same field in right
. Read more
pub fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> F where
F: Copy,
pub fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Aligned>) -> F where
F: Copy,
Gets a copy of a field (determined by offset
).
The field is determined by offset
. Read more
impl<S> ROExtOps<Unaligned> for S
impl<S> ROExtOps<Unaligned> for S
pub fn f_replace<F>(
&mut self,
offset: FieldOffset<S, F, Unaligned>,
value: F
) -> F
pub fn f_replace<F>(
&mut self,
offset: FieldOffset<S, F, Unaligned>,
value: F
) -> F
Replaces a field (determined by offset
) with value
,
returning the previous value of the field. Read more
pub fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, right: &mut S)
pub fn f_swap<F>(&mut self, offset: FieldOffset<S, F, Unaligned>, right: &mut S)
Swaps a field (determined by offset
) with the same field in right
. Read more
pub fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> F where
F: Copy,
pub fn f_get_copy<F>(&self, offset: FieldOffset<S, F, Unaligned>) -> F where
F: Copy,
Gets a copy of a field (determined by offset
).
The field is determined by offset
. Read more
impl<T> SelfOps for T where
T: ?Sized,
impl<T> SelfOps for T where
T: ?Sized,
fn eq_id(&self, other: &Self) -> bool
fn eq_id(&self, other: &Self) -> bool
Compares the address of self
with the address of other
. Read more
fn piped<F, U>(self, f: F) -> U where
F: FnOnce(Self) -> U,
fn piped<F, U>(self, f: F) -> U where
F: FnOnce(Self) -> U,
Emulates the pipeline operator, allowing method syntax in more places. Read more
fn piped_ref<'a, F, U>(&'a self, f: F) -> U where
F: FnOnce(&'a Self) -> U,
fn piped_ref<'a, F, U>(&'a self, f: F) -> U where
F: FnOnce(&'a Self) -> U,
The same as 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) -> U where
F: FnOnce(&'a mut Self) -> U,
fn piped_mut<'a, F, U>(&'a mut self, f: F) -> U where
F: FnOnce(&'a mut Self) -> U,
The same as piped
, except that the function takes &mut Self
.
Useful for functions that take &mut Self
instead of Self
. Read more
fn mutated<F>(self, f: F) -> Self where
F: FnOnce(&mut Self),
fn mutated<F>(self, f: F) -> Self where
F: FnOnce(&mut Self),
Mutates self using a closure taking self by mutable reference, passing it along the method chain. Read more
fn observe<F>(self, f: F) -> Self where
F: FnOnce(&Self),
fn observe<F>(self, f: F) -> Self where
F: FnOnce(&Self),
Observes the value of self, passing it along unmodified. Useful in long method chains. Read more
fn into_<T>(self) -> T where
Self: Into<T>,
fn into_<T>(self) -> T where
Self: Into<T>,
Performs a conversion with Into
.
using the turbofish .into_::<_>()
syntax. Read more
fn as_ref_<T>(&self) -> &T where
Self: AsRef<T>,
T: ?Sized,
fn as_ref_<T>(&self) -> &T where
Self: AsRef<T>,
T: ?Sized,
Performs a reference to reference conversion with AsRef
,
using the turbofish .as_ref_::<_>()
syntax. Read more
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcepub fn to_owned(&self) -> T
pub fn to_owned(&self) -> T
Creates owned data from borrowed data, usually by cloning. Read more
sourcepub fn clone_into(&self, target: &mut T)
pub fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more
sourceimpl<This> TransmuteElement for This where
This: ?Sized,
impl<This> TransmuteElement for This where
This: ?Sized,
sourceunsafe fn transmute_element<T>(self) -> Self::TransmutedPtr where
Self: CanTransmuteElement<T>,
unsafe fn transmute_element<T>(self) -> Self::TransmutedPtr where
Self: CanTransmuteElement<T>,
Transmutes the element type of this pointer.. Read more
impl<T> TypeIdentity for T where
T: ?Sized,
impl<T> TypeIdentity for T where
T: ?Sized,
type Type = T
type Type = T
This is always Self
.
fn into_type(self) -> Self::Type where
Self::Type: Sized,
fn into_type(self) -> Self::Type where
Self::Type: Sized,
Converts a value back to the original type.
fn as_type(&self) -> &Self::Type
fn as_type(&self) -> &Self::Type
Converts a reference back to the original type.
fn as_type_mut(&mut self) -> &mut Self::Type
fn as_type_mut(&mut self) -> &mut Self::Type
Converts a mutable reference back to the original type.
fn into_type_box(self: Box<Self, Global>) -> Box<Self::Type, Global>
fn into_type_box(self: Box<Self, Global>) -> Box<Self::Type, Global>
Converts a box back to the original type.
fn into_type_arc(this: Arc<Self>) -> Arc<Self::Type>
fn into_type_arc(this: Arc<Self>) -> Arc<Self::Type>
Converts an Arc back to the original type. Read more
fn into_type_rc(this: Rc<Self>) -> Rc<Self::Type>
fn into_type_rc(this: Rc<Self>) -> Rc<Self::Type>
Converts an Rc back to the original type. Read more
fn from_type(this: Self::Type) -> Self where
Self::Type: Sized,
fn from_type(this: Self::Type) -> Self where
Self::Type: Sized,
Converts a value back to the original type.
fn from_type_ref(this: &Self::Type) -> &Self
fn from_type_ref(this: &Self::Type) -> &Self
Converts a reference back to the original type.
fn from_type_mut(this: &mut Self::Type) -> &mut Self
fn from_type_mut(this: &mut Self::Type) -> &mut Self
Converts a mutable reference back to the original type.
fn from_type_box(this: Box<Self::Type, Global>) -> Box<Self, Global>
fn from_type_box(this: Box<Self::Type, Global>) -> Box<Self, Global>
Converts a box back to the original type.
fn from_type_arc(this: Arc<Self::Type>) -> Arc<Self>
fn from_type_arc(this: Arc<Self::Type>) -> Arc<Self>
Converts an Arc back to the original type.
fn from_type_rc(this: Rc<Self::Type>) -> Rc<Self>
fn from_type_rc(this: Rc<Self::Type>) -> Rc<Self>
Converts an Rc back to the original type.