liblisa::arch

Trait CpuState

pub trait CpuState<A: Arch>: Default {
    type DiffMask: Clone + Default + Debug;

Show 18 methods // Required methods fn gpreg(&self, reg: A::GpReg) -> u64; fn set_gpreg(&mut self, reg: A::GpReg, value: u64); fn reg(&self, reg: A::Reg) -> Value<'_>; fn modify_reg<F: FnOnce(MutValue<'_>)>(&mut self, reg: A::Reg, update: F); fn flag(&self, flag: A::Flag) -> bool; fn set_flag(&mut self, flag: A::Flag, value: bool); fn size() -> usize; fn state_byte_to_reg(byte: StateByte) -> (A::Reg, usize); fn reg_to_state_byte(reg: A::Reg, byte: usize) -> StateByte; fn create_diff_mask<I: Iterator<Item = StateByte>>( items: I, ) -> Self::DiffMask; // Provided methods fn create<R: FnMut(A::Reg, MutValue<'_>)>(regval: R) -> Self { ... } fn default_with_pc(pc: u64) -> Self { ... } fn get_state_byte(&self, byte: StateByte) -> u8 { ... } fn set_state_byte(&mut self, byte: StateByte, value: u8) { ... } fn state_bytes_unequal(&self, dest: StateByte, other: &Self) -> bool { ... } fn state_bytes_equal(&self, dest: StateByte, other: &Self) -> bool { ... } fn find_differences<F: FnMut(StateByte)>(&self, other: &Self, found: &mut F) { ... } fn find_dataflows_masked<F: FnMut(StateByte)>( b: SystemStateIoPair<'_, A>, a: SystemStateIoPair<'_, A>, dest_diff_mask: &Self::DiffMask, diff_mask: &Self::DiffMask, found: &mut F, ) { ... }
}
Expand description

Represents a CPU state.

Required Associated Types§

type DiffMask: Clone + Default + Debug

The type of the difference mask used in CpuState::find_dataflows_masked.

An optional optimization. Set to () if not used.

Required Methods§

fn gpreg(&self, reg: A::GpReg) -> u64

Returns the value of reg.

fn set_gpreg(&mut self, reg: A::GpReg, value: u64)

Sets the value of reg.

fn reg(&self, reg: A::Reg) -> Value<'_>

Returns the value of reg.

fn modify_reg<F: FnOnce(MutValue<'_>)>(&mut self, reg: A::Reg, update: F)

Modifies the value of reg using update function update.

The update function receives a crate::value::MutValue, which can be used to update the value of the register.

fn flag(&self, flag: A::Flag) -> bool

Returns the value of flag.

fn set_flag(&mut self, flag: A::Flag, value: bool)

Sets the value of flag.

fn size() -> usize

Returns the size (in bytes) of the CPU state.

fn state_byte_to_reg(byte: StateByte) -> (A::Reg, usize)

Converts a state byte to a register. Inverse of CpuState::reg_to_state_byte.

fn reg_to_state_byte(reg: A::Reg, byte: usize) -> StateByte

Converts a (register, byte index) tuple to a state byte. Inverse of CpuState::state_byte_to_reg.

fn create_diff_mask<I: Iterator<Item = StateByte>>(items: I) -> Self::DiffMask

Creates a mask of state bytes whose differences can be ignored.

Provided Methods§

fn create<R: FnMut(A::Reg, MutValue<'_>)>(regval: R) -> Self

Creates a new CPU state using regval to determine the values of the registers.

Implementation is optional. The default implementation calls CpuState::modify_reg on each register to initialize them.

fn default_with_pc(pc: u64) -> Self

Creates a default state with the program counter set to pc.

fn get_state_byte(&self, byte: StateByte) -> u8

Returns the value of the byte byte in the CPU state.

fn set_state_byte(&mut self, byte: StateByte, value: u8)

Sets the value of the byte byte in the CPU state.

fn state_bytes_unequal(&self, dest: StateByte, other: &Self) -> bool

Returns true if the value of the specified state byte in self is not equal to the value in other.

fn state_bytes_equal(&self, dest: StateByte, other: &Self) -> bool

Returns true if the value of the specified state byte in self is equal to the value in other.

fn find_differences<F: FnMut(StateByte)>(&self, other: &Self, found: &mut F)

Enumerates over all differences between the two state pairs. Calls found for each state byte that differs between self and other. The call order is unspecified.

fn find_dataflows_masked<F: FnMut(StateByte)>( b: SystemStateIoPair<'_, A>, a: SystemStateIoPair<'_, A>, dest_diff_mask: &Self::DiffMask, diff_mask: &Self::DiffMask, found: &mut F, )

Enumerates over all differences between the two state pairs. Calls found for each state byte that differs between self and other. diff_mask is a hint of differences that can be ignored. Therefore, this function may call found even for state bytes that can be ignored according to diff_mask.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§