pub struct Function {
pub name: Str,
pub names: Names,
pub strings: Strings,
pub segments: Segments,
/* private fields */
}Expand description
A single function in the binary.
A function is a set of basic blocks, with one serving as an entry point. Basic blocks form a control flow graph.
Each function also has a user-changeable name and a unchangeable uuid.
Fields
name: StrCanonical name of the function. Can be anything.
names: NamesTable mapping SSA variable names to integers.
strings: StringsTable mapping strings to integers.
segments: SegmentsTable mapping segments identifiers to integers.
Implementations
sourceimpl Function
impl Function
sourcepub fn new<A: Architecture>(
init: A::Configuration,
start: u64,
region: &Region,
uuid: Uuid
) -> Result<Function>
pub fn new<A: Architecture>(
init: A::Configuration,
start: u64,
region: &Region,
uuid: Uuid
) -> Result<Function>
Creates a new function by disassembling from region starting at start.
sourcepub fn extend<A: Architecture>(
&mut self,
init: A::Configuration,
region: &Region
) -> Result<()>
pub fn extend<A: Architecture>(
&mut self,
init: A::Configuration,
region: &Region
) -> Result<()>
Continues disassembling of region. The function looks for resolved, indirect control flow
edges.
sourcepub fn entry_point(&self) -> BasicBlockIndex
pub fn entry_point(&self) -> BasicBlockIndex
Function entry point.
sourcepub fn mnemonics<'a, Idx: IntoMnemonicRange + Sized>(
&'a self,
idx: Idx
) -> MnemonicIterator<'a>ⓘNotable traits for MnemonicIterator<'a>impl<'a> Iterator for MnemonicIterator<'a> type Item = (MnemonicIndex, &'a Mnemonic);
pub fn mnemonics<'a, Idx: IntoMnemonicRange + Sized>(
&'a self,
idx: Idx
) -> MnemonicIterator<'a>ⓘNotable traits for MnemonicIterator<'a>impl<'a> Iterator for MnemonicIterator<'a> type Item = (MnemonicIndex, &'a Mnemonic);
Iterator over all mnemonics in basic block idx.
sourcepub fn basic_blocks<'a>(&'a self) -> BasicBlockIterator<'a>ⓘNotable traits for BasicBlockIterator<'a>impl<'a> Iterator for BasicBlockIterator<'a> type Item = (BasicBlockIndex, &'a BasicBlock);
pub fn basic_blocks<'a>(&'a self) -> BasicBlockIterator<'a>ⓘNotable traits for BasicBlockIterator<'a>impl<'a> Iterator for BasicBlockIterator<'a> type Item = (BasicBlockIndex, &'a BasicBlock);
Iterator over all basic blocks in reverse post order.
sourcepub fn cflow_graph<'a>(&'a self) -> &'a Graph<CfgNode, Guard>
pub fn cflow_graph<'a>(&'a self) -> &'a Graph<CfgNode, Guard>
The Functions control flow graph.
sourcepub fn basic_block<'a>(&'a self, idx: BasicBlockIndex) -> &'a BasicBlock
pub fn basic_block<'a>(&'a self, idx: BasicBlockIndex) -> &'a BasicBlock
Returns a reference to the basic block idx.
sourcepub fn mnemonic<'a>(&'a self, idx: MnemonicIndex) -> &'a Mnemonic
pub fn mnemonic<'a>(&'a self, idx: MnemonicIndex) -> &'a Mnemonic
Returns a reference to the mnemonic idx.
sourcepub fn statements<'a, Idx: IntoStatementRange + Sized>(
&'a self,
rgn: Idx
) -> StatementsIter<'a>
pub fn statements<'a, Idx: IntoStatementRange + Sized>(
&'a self,
rgn: Idx
) -> StatementsIter<'a>
Iterator over all IL statements in rgn.
sourcepub fn first_address(&self) -> u64
pub fn first_address(&self) -> u64
Lowest address occupied by a basic block. Not neccecarly the entry point.
sourcepub fn entry_address(&self) -> u64
pub fn entry_address(&self) -> u64
First address of the functions entry basic block.
sourcepub fn indirect_jumps<'a>(&'a self) -> IndirectJumps<'a>
pub fn indirect_jumps<'a>(&'a self) -> IndirectJumps<'a>
Iterator over all indirect, unresolved jumps.
sourcepub fn cflow_graph_mut<'a>(&'a mut self) -> &'a mut Graph<CfgNode, Guard>
pub fn cflow_graph_mut<'a>(&'a mut self) -> &'a mut Graph<CfgNode, Guard>
Mutable reference to the control flow graph.
sourcepub fn resolve_indirect_jumps<F: FnMut(&Variable) -> SmallVec<[Constant; 1]>>(
&mut self,
func: F
) -> bool
pub fn resolve_indirect_jumps<F: FnMut(&Variable) -> SmallVec<[Constant; 1]>>(
&mut self,
func: F
) -> bool
Calls func on each indirect jump and call instruction and rewrites it to jump/call the
returned concrete addresses.
sourcepub fn rewrite_basic_block<F: FnMut(&mut Statement, &mut Names, &mut Strings, &mut Segments) -> Result<RewriteControl> + Sized>(
&mut self,
basic_block: BasicBlockIndex,
func: F
) -> Result<()>
pub fn rewrite_basic_block<F: FnMut(&mut Statement, &mut Names, &mut Strings, &mut Segments) -> Result<RewriteControl> + Sized>(
&mut self,
basic_block: BasicBlockIndex,
func: F
) -> Result<()>
Iterates thru all statements in basic_block calling func one each. The function is
allowed to modify the IL.
sourcepub fn insert_mnemonic(
&mut self,
basic_block: BasicBlockIndex,
pos: usize,
opcode: StrRef,
args: SmallVec<[Value; 3]>,
stmts: Vec<Statement>
) -> Result<()>
pub fn insert_mnemonic(
&mut self,
basic_block: BasicBlockIndex,
pos: usize,
opcode: StrRef,
args: SmallVec<[Value; 3]>,
stmts: Vec<Statement>
) -> Result<()>
Inserts a new mnemonic at position pos inside basic_block with opcode and semantics
described by stmts.
sourcepub fn remove_mnemonic(&mut self, mnemonic: MnemonicIndex) -> Result<()>
pub fn remove_mnemonic(&mut self, mnemonic: MnemonicIndex) -> Result<()>
Removes mnemonic.
sourcepub fn drop_first_mnemonic(&mut self, basic_block: BasicBlockIndex) -> Result<()>
pub fn drop_first_mnemonic(&mut self, basic_block: BasicBlockIndex) -> Result<()>
Removes the first mnemonic of basic_block. Fails of basic_block has no mnemonics.
sourcepub fn retain_basic_blocks<F: FnMut(&Function, BasicBlockIndex) -> bool>(
&mut self,
f: F
) -> Result<()>
pub fn retain_basic_blocks<F: FnMut(&Function, BasicBlockIndex) -> bool>(
&mut self,
f: F
) -> Result<()>
Deletes all basic blocks for which f returns false.
sourcepub fn assemble(
name: Str,
names: Names,
segments: Segments,
region: Uuid,
strings: Strings,
uuid: Uuid,
start: u64,
mnemonics: Vec<(Mnemonic, Vec<Statement>)>,
by_source: HashMap<(u64, usize), Vec<(CfgTarget, Guard)>>,
by_destination: HashMap<(u64, usize), Vec<(CfgTarget, Guard)>>
) -> Result<Function>
pub fn assemble(
name: Str,
names: Names,
segments: Segments,
region: Uuid,
strings: Strings,
uuid: Uuid,
start: u64,
mnemonics: Vec<(Mnemonic, Vec<Statement>)>,
by_source: HashMap<(u64, usize), Vec<(CfgTarget, Guard)>>,
by_destination: HashMap<(u64, usize), Vec<(CfgTarget, Guard)>>
) -> Result<Function>
Assembles a new function from a list of mnemonics and control flow edges. Used for deserializing functions.