Trait yaxpeax_core::analyses::value_range::ConditionalBoundInference [−][src]
pub trait ConditionalBoundInference<A: Arch + SSAValues, U> {
fn conditional_source_for(
conditional_instr: &A::Instruction,
conditional_addr: A::Address,
dfg: &SSA<A>
) -> Option<(A::Address, DefSource<A::Address>)>;
fn infer_conditional_bounds(
curr_block: A::Address,
test_instr: &A::Instruction,
test_addr: A::Address,
conditional_instr: &A::Instruction,
conditional_addr: A::Address,
cfg: &ControlFlowGraph<A::Address>,
dfg: &SSA<A>,
aux_data: &mut U
) -> bool;
fn inferrable_conditional(conditional_instr: &A::Instruction) -> bool;
fn add_conditional_bounds<M: MemoryRange<A>>(
block_start: A::Address,
conditional: A::Address,
conditional_instr: &A::Instruction,
cfg: &ControlFlowGraph<A::Address>,
dfg: &SSA<A>,
data: &M,
aux_data: &mut U
) -> bool
where
A: DecodeFrom<M>,
{ ... }
}
Required methods
Finds the instruction responsible for the condition that conditional_instr
branches on.
For some architectures, this may be a ways earlier in the program. For others, this may
simply be “the conditional instruction”.
fn infer_conditional_bounds(
curr_block: A::Address,
test_instr: &A::Instruction,
test_addr: A::Address,
conditional_instr: &A::Instruction,
conditional_addr: A::Address,
cfg: &ControlFlowGraph<A::Address>,
dfg: &SSA<A>,
aux_data: &mut U
) -> bool
fn infer_conditional_bounds(
curr_block: A::Address,
test_instr: &A::Instruction,
test_addr: A::Address,
conditional_instr: &A::Instruction,
conditional_addr: A::Address,
cfg: &ControlFlowGraph<A::Address>,
dfg: &SSA<A>,
aux_data: &mut U
) -> bool
This yadda yadda’s the good stuff. Given a conditional instruction, and instruction that decides its conditionality (these may be the same!) apply bounds to the program for control-depndent edges.
fn inferrable_conditional(conditional_instr: &A::Instruction) -> bool
fn inferrable_conditional(conditional_instr: &A::Instruction) -> bool
Is the instruction in question one that an implementor might want to look at?