Struct SystemStateByteView
pub struct SystemStateByteView<'a, A: Arch> { /* private fields */ }
Expand description
A bytewise view of a system state. Allows the state to be read and written as if it were a contiguous block of bytes.
Implementations§
§impl<'a, A: Arch> SystemStateByteView<'a, A>
impl<'a, A: Arch> SystemStateByteView<'a, A>
pub fn new(memory_accesses: &'a MemoryAccesses<A>) -> Self
pub fn new(memory_accesses: &'a MemoryAccesses<A>) -> Self
Creates a new byte view for system states consistent with memory_accesses
.
pub fn get(&self, state: &SystemState<A>, byte: StateByte) -> u8
pub fn get(&self, state: &SystemState<A>, byte: StateByte) -> u8
Returns byte
in the system state state
.
pub fn set(&self, state: &mut SystemState<A>, byte: StateByte, value: u8)
pub fn set(&self, state: &mut SystemState<A>, byte: StateByte, value: u8)
Writes byte
in the system state state
.
pub fn bytes_equal(
&self,
dest: StateByte,
a: &SystemState<A>,
b: &SystemState<A>,
) -> bool
pub fn bytes_equal( &self, dest: StateByte, a: &SystemState<A>, b: &SystemState<A>, ) -> bool
Returns true if byte dest
has the same value in both a
and b
.
pub fn bytes_unequal(
&self,
dest: StateByte,
a: &SystemState<A>,
b: &SystemState<A>,
) -> bool
pub fn bytes_unequal( &self, dest: StateByte, a: &SystemState<A>, b: &SystemState<A>, ) -> bool
Returns true if byte dest
have different values in both a
and b
.
pub fn as_reg(&self, byte: StateByte) -> (SystemStateByteViewReg<A::Reg>, usize)
pub fn as_reg(&self, byte: StateByte) -> (SystemStateByteViewReg<A::Reg>, usize)
Converts the byte to a SystemStateByteViewReg
and index.
pub fn reg_to_byte(
&self,
reg: SystemStateByteViewReg<A::Reg>,
byte: usize,
) -> StateByte
pub fn reg_to_byte( &self, reg: SystemStateByteViewReg<A::Reg>, byte: usize, ) -> StateByte
Converts reg
and the corresponding byte index byte
to a StateByte
.
pub fn arch_reg_to_reg(
&self,
reg: <A as Arch>::Reg,
) -> SystemStateByteViewReg<A::Reg>
pub fn arch_reg_to_reg( &self, reg: <A as Arch>::Reg, ) -> SystemStateByteViewReg<A::Reg>
Converts a Register
to the corresponding SystemStateByteViewReg
.
pub fn get_reg<'v>(
&self,
state: &'v SystemState<A>,
reg: &SystemStateByteViewReg<A::Reg>,
) -> Value<'v>
pub fn get_reg<'v>( &self, state: &'v SystemState<A>, reg: &SystemStateByteViewReg<A::Reg>, ) -> Value<'v>
Returns the value of the register reg
in state
.
pub fn set_reg(
&self,
state: &mut SystemState<A>,
reg: &SystemStateByteViewReg<A::Reg>,
value: Value<'_>,
)
pub fn set_reg( &self, state: &mut SystemState<A>, reg: &SystemStateByteViewReg<A::Reg>, value: Value<'_>, )
Writes the value of the register reg
in state
.
pub fn modify_reg(
&self,
state: &mut SystemState<A>,
reg: &SystemStateByteViewReg<A::Reg>,
modify: impl FnMut(MutValue<'_>),
)
pub fn modify_reg( &self, state: &mut SystemState<A>, reg: &SystemStateByteViewReg<A::Reg>, modify: impl FnMut(MutValue<'_>), )
Writes the value of the register reg
in state
.
pub fn to_location(&self, reg: SystemStateByteViewReg<A::Reg>) -> Location<A>
pub fn to_location(&self, reg: SystemStateByteViewReg<A::Reg>) -> Location<A>
Converts reg
to a Location
.
pub fn find_differences<F: FnMut(StateByte)>(
&self,
left: &SystemState<A>,
right: &SystemState<A>,
found: &mut F,
)
pub fn find_differences<F: FnMut(StateByte)>( &self, left: &SystemState<A>, right: &SystemState<A>, found: &mut F, )
Calls found
for each byte which does not have the same value in left
and right
.
pub fn all_regs(
&self,
) -> impl Iterator<Item = SystemStateByteViewReg<A::Reg>> + '_
pub fn all_regs( &self, ) -> impl Iterator<Item = SystemStateByteViewReg<A::Reg>> + '_
Iterates over all registers.
pub fn reg_type(&self, reg: &SystemStateByteViewReg<A::Reg>) -> ValueType
pub fn reg_type(&self, reg: &SystemStateByteViewReg<A::Reg>) -> ValueType
Returns the ValueType
of reg
.
pub fn create_diff_mask<I: Iterator<Item = StateByte>>(
&self,
iter: I,
) -> <A::CpuState as CpuState<A>>::DiffMask
pub fn create_diff_mask<I: Iterator<Item = StateByte>>( &self, iter: I, ) -> <A::CpuState as CpuState<A>>::DiffMask
Creates a mask for Self::find_dataflows_masked
that covers all bytes in iter
.
pub fn find_dataflows_masked<F: FnMut(StateByte)>(
&self,
b: SystemStateIoPair<'_, A>,
a: SystemStateIoPair<'_, A>,
dest_diff_mask: &<A::CpuState as CpuState<A>>::DiffMask,
diff_mask: &<A::CpuState as CpuState<A>>::DiffMask,
found: &mut F,
)
pub fn find_dataflows_masked<F: FnMut(StateByte)>( &self, b: SystemStateIoPair<'_, A>, a: SystemStateIoPair<'_, A>, dest_diff_mask: &<A::CpuState as CpuState<A>>::DiffMask, diff_mask: &<A::CpuState as CpuState<A>>::DiffMask, found: &mut F, )
Calls found
for all state bytes SB where a_in[SB] != a_out[SB]
or b_in[SB] != b_out[SB]
.
The function is allowed to ignore any masked bytes in dest_diff_mask
, but is not required to do so.
pub fn try_reg_to_gpreg(
&self,
reg: SystemStateByteViewReg<A::Reg>,
) -> Option<<A as Arch>::GpReg>
pub fn try_reg_to_gpreg( &self, reg: SystemStateByteViewReg<A::Reg>, ) -> Option<<A as Arch>::GpReg>
Tries to convert reg
to a general-purpose register.
Trait Implementations§
§impl<'a, A: Clone + Arch> Clone for SystemStateByteView<'a, A>
impl<'a, A: Clone + Arch> Clone for SystemStateByteView<'a, A>
§fn clone(&self) -> SystemStateByteView<'a, A>
fn clone(&self) -> SystemStateByteView<'a, A>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more§impl<'a, A: Debug + Arch> Debug for SystemStateByteView<'a, A>
impl<'a, A: Debug + Arch> Debug for SystemStateByteView<'a, A>
impl<'a, A: Copy + Arch> Copy for SystemStateByteView<'a, A>
Auto Trait Implementations§
impl<'a, A> Freeze for SystemStateByteView<'a, A>
impl<'a, A> RefUnwindSafe for SystemStateByteView<'a, A>
impl<'a, A> Send for SystemStateByteView<'a, A>
impl<'a, A> Sync for SystemStateByteView<'a, A>
impl<'a, A> Unpin for SystemStateByteView<'a, A>
impl<'a, A> UnwindSafe for SystemStateByteView<'a, A>
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<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
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 more