pub struct Address(/* private fields */);
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§
source§impl 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>(bits: RangeInclusive<T>) -> Address
pub fn bit_mask<T>(bits: RangeInclusive<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: RangeInclusive<u8>) -> Address
pub const fn bit_mask_u8(bits: RangeInclusive<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_u8(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) -> Self
pub const fn as_mem_aligned(self, mem_size: umem) -> Self
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) -> Self
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>(self, bits: RangeInclusive<T>) -> Address
pub fn extract_bits<T>(self, bits: RangeInclusive<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§
source§impl<'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
source§impl AddAssign<i16> for Address
impl AddAssign<i16> for Address
source§fn add_assign(&mut self, other: i16)
fn add_assign(&mut self, other: i16)
+=
operation. Read moresource§impl AddAssign<i32> for Address
impl AddAssign<i32> for Address
source§fn add_assign(&mut self, other: i32)
fn add_assign(&mut self, other: i32)
+=
operation. Read moresource§impl AddAssign<i64> for Address
impl AddAssign<i64> for Address
source§fn add_assign(&mut self, other: i64)
fn add_assign(&mut self, other: i64)
+=
operation. Read moresource§impl AddAssign<i8> for Address
impl AddAssign<i8> for Address
source§fn add_assign(&mut self, other: i8)
fn add_assign(&mut self, other: i8)
+=
operation. Read moresource§impl AddAssign<isize> for Address
impl AddAssign<isize> for Address
source§fn add_assign(&mut self, other: isize)
fn add_assign(&mut self, other: isize)
+=
operation. Read moresource§impl AddAssign<u16> for Address
impl AddAssign<u16> for Address
source§fn add_assign(&mut self, other: u16)
fn add_assign(&mut self, other: u16)
+=
operation. Read moresource§impl AddAssign<u32> for Address
impl AddAssign<u32> for Address
source§fn add_assign(&mut self, other: u32)
fn add_assign(&mut self, other: u32)
+=
operation. Read moresource§impl AddAssign<u64> for Address
impl AddAssign<u64> for Address
source§fn add_assign(&mut self, other: u64)
fn add_assign(&mut self, other: u64)
+=
operation. Read moresource§impl AddAssign<u8> for Address
impl AddAssign<u8> for Address
source§fn add_assign(&mut self, other: u8)
fn add_assign(&mut self, other: u8)
+=
operation. Read moresource§impl AddAssign<usize> for Address
impl AddAssign<usize> for Address
source§fn add_assign(&mut self, other: usize)
fn add_assign(&mut self, other: usize)
+=
operation. Read moresource§impl 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);
source§impl<'de> Deserialize<'de> for Address
impl<'de> Deserialize<'de> for Address
source§fn 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>,
source§impl From<Address> for PhysicalAddress
impl From<Address> for PhysicalAddress
Converts a PhysicalAddress
into a Address
.
source§impl From<PhysicalAddress> for Address
impl From<PhysicalAddress> for Address
Converts a PhysicalAddress
into a Address
.
source§fn from(address: PhysicalAddress) -> Self
fn from(address: PhysicalAddress) -> Self
source§impl<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.
source§impl<U: PrimitiveAddress> From<U> for Address
impl<U: PrimitiveAddress> From<U> for Address
Converts any PrimitiveAddress
into an Address.
source§impl GetStaticEquivalent_ for Address
impl GetStaticEquivalent_ for Address
type StaticEquivalent = _static_Address
source§impl MmuTranslationBase for Address
impl MmuTranslationBase for Address
source§fn get_pt_by_virt_addr(&self, _: Address) -> Address
fn get_pt_by_virt_addr(&self, _: Address) -> Address
source§fn get_pt_by_index(&self, idx: usize) -> (Address, usize)
fn get_pt_by_index(&self, idx: usize) -> (Address, usize)
idx
.source§fn pt_count(&self) -> usize
fn pt_count(&self) -> usize
fn virt_addr_filter<B>(
&self,
spec: &ArchMmuSpec,
addr: CTup3<Address, Address, B>,
work_group: (&mut TranslationChunk<Self>, &mut FixedSliceVec<'_, 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 FixedSliceVec<'_, TranslateData<B>>, &mut FixedSliceVec<'_, TranslateData<B>>), work_vecs: &mut (FixedSliceVec<'_, TranslationChunk<Address>>, FixedSliceVec<'_, TranslateData<B>>), wait_vecs: &mut (FixedSliceVec<'_, TranslationChunk<Address>>, FixedSliceVec<'_, TranslateData<B>>) )
source§impl Ord for Address
impl Ord for Address
source§impl PartialEq for Address
impl PartialEq for Address
source§impl PartialOrd for Address
impl PartialOrd for Address
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresource§impl StableAbi for Address
impl StableAbi for Address
§type IsNonZeroType = <u64 as StableAbi>::IsNonZeroType
type IsNonZeroType = <u64 as StableAbi>::IsNonZeroType
source§const LAYOUT: &'static TypeLayout = _
const LAYOUT: &'static TypeLayout = _
source§const ABI_CONSTS: AbiConsts = _
const ABI_CONSTS: AbiConsts = _
const
-equivalents of the associated types.source§impl<'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
source§impl Sub for Address
impl Sub 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));
source§impl SubAssign<i16> for Address
impl SubAssign<i16> for Address
source§fn sub_assign(&mut self, other: i16)
fn sub_assign(&mut self, other: i16)
-=
operation. Read moresource§impl SubAssign<i32> for Address
impl SubAssign<i32> for Address
source§fn sub_assign(&mut self, other: i32)
fn sub_assign(&mut self, other: i32)
-=
operation. Read moresource§impl SubAssign<i64> for Address
impl SubAssign<i64> for Address
source§fn sub_assign(&mut self, other: i64)
fn sub_assign(&mut self, other: i64)
-=
operation. Read moresource§impl SubAssign<i8> for Address
impl SubAssign<i8> for Address
source§fn sub_assign(&mut self, other: i8)
fn sub_assign(&mut self, other: i8)
-=
operation. Read moresource§impl SubAssign<isize> for Address
impl SubAssign<isize> for Address
source§fn sub_assign(&mut self, other: isize)
fn sub_assign(&mut self, other: isize)
-=
operation. Read moresource§impl SubAssign<u16> for Address
impl SubAssign<u16> for Address
source§fn sub_assign(&mut self, other: u16)
fn sub_assign(&mut self, other: u16)
-=
operation. Read moresource§impl SubAssign<u32> for Address
impl SubAssign<u32> for Address
source§fn sub_assign(&mut self, other: u32)
fn sub_assign(&mut self, other: u32)
-=
operation. Read moresource§impl SubAssign<u64> for Address
impl SubAssign<u64> for Address
source§fn sub_assign(&mut self, other: u64)
fn sub_assign(&mut self, other: u64)
-=
operation. Read moresource§impl SubAssign<u8> for Address
impl SubAssign<u8> for Address
source§fn sub_assign(&mut self, other: u8)
fn sub_assign(&mut self, other: u8)
-=
operation. Read moresource§impl SubAssign<usize> for Address
impl SubAssign<usize> for Address
source§fn sub_assign(&mut self, other: usize)
fn sub_assign(&mut self, other: usize)
-=
operation. Read moreimpl 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§
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
§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.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