basicblock module¶
Class | Description |
|---|---|
The | |
| |
|
BasicBlock¶
- classBasicBlock[source]¶
Bases:
objectThe
classBasicBlockobject is returned during analysis and should not be directly instantiated.Basic blocks contain a sequence of instructions that must execute in-order with no branches.We include calls in basic blocks, which technically violates that assumption, but you can markfunctions asfunc.can_return = False if a given function should terminate basic blocks.:Example:
>>>forfuncinbv.functions:>>>forbbinfunc:>>># Any block-based analysis could start here>>>forinstinbb:>>>pass# Optionally do something here with instructions
- __init__(handle:LP_BNBasicBlock,view:BinaryView|None=None)[source]¶
- Parameters:
handle (LP_BNBasicBlock) –
view (BinaryView |None) –
- add_instruction_data(data:bytes)→None[source]¶
Adds raw instruction data to the basic block.
Note
This method is intended for use by architecture plugins only.
- Parameters:
data (bytes) – Raw instruction data to add to the basic block.
- Return type:
None
- add_pending_outgoing_edge(typ:BranchType,addr:int,arch:Architecture,fallthrough:bool=False)→None[source]¶
Adds a pending outgoing edge to the basic block. This is used to add edges that are not yet resolved.
Note
This method is intended for use by architecture plugins only.
- Parameters:
typ (BranchType) – The type of the branch.
addr (int) – The address of the target basic block.
arch (Architecture) – The architecture of the target basic block.
fallthrough (bool) – Whether this edge is a fallthrough edge.
- Return type:
None
- clear_pending_outgoing_edges()→None[source]¶
Clears all pending outgoing edges for the basic block. This is used to remove edges that have not yet been resolved.
Note
This method is intended for use by architecture plugins only.
- Return type:
None
- get_disassembly_text(settings:DisassemblySettings|None=None)→List[DisassemblyTextLine][source]¶
get_disassembly_textreturns a list of DisassemblyTextLine objects for the current basic block.- Parameters:
settings (DisassemblySettings) – (optional) DisassemblySettings object
- Example:
>>>current_basic_block.get_disassembly_text()[<0x100000f30: _main:>, <0x100000f30: push rbp>, ... ]
- Return type:
- get_instruction_data(addr:int)→bytes[source]¶
Returns the raw instruction data for the basic block at the specified address.
Note
This method is intended for use by architecture plugins only.
- get_iterated_dominance_frontier(blocks:List[BasicBlock])→List[BasicBlock][source]¶
Calculates the iterated dominance frontier of the given blocks (this is used to determine φ node placement)
- Parameters:
blocks (List[BasicBlock]) –
- Return type:
- get_pending_outgoing_edges()→list[PendingBasicBlockEdge][source]¶
Returns a list of pending outgoing edges for the basic block. These are edges that have not yet been resolved.
Note
This method is intended for use by architecture plugins only.
- Returns:
List of PendingBasicBlockEdge objects.
- Return type:
- set_auto_highlight(color:HighlightColor)→None[source]¶
set_auto_highlighthighlights the current BasicBlock with the supplied color.Warning
Use only in analysis plugins. Do not use in regular plugins, as colors won’t be saved to the database.
- Parameters:
color (HighlightColor) – Color value to use for highlighting
color –
- Return type:
None
- set_user_highlight(color:HighlightColor)→None[source]¶
set_user_highlighthighlights the current BasicBlock with the supplied color- Parameters:
color (HighlightColor) – Color value to use for highlighting
color –
- Example:
>>>current_basic_block.set_user_highlight(_highlight.HighlightColor(red=0xff,blue=0xff,green=0))>>>current_basic_block.set_user_highlight(HighlightStandardColor.BlueHighlightColor)
- Return type:
None
- propertyannotations:List[List[InstructionTextToken]]¶
List of automatic annotations for the start of this block (read-only)
- propertyarch:Architecture¶
Basic block architecture (read-only)
- propertydisassembly_text:List[DisassemblyTextLine]¶
disassembly_textproperty which returns a list of function.DisassemblyTextLine objects for the current basic block.- Example:
>>>current_basic_block.disassembly_text[<0x100000f30: _main:>, ...]
- propertydominance_frontier:List[BasicBlock]¶
Dominance frontier for this basic block (read-only)
The dominance frontier of a basic block B is the set of blocks that are not strictly dominated by B,but are immediately control-dependent on B. In other words, it contains the blocks where B’s dominance“stops” - the blocks that have at least one predecessor not dominated by B, while having anotherpredecessor that is dominated by B.
- propertydominator_tree_children:List[BasicBlock]¶
List of child blocks in the dominator tree for this basic block (read-only)
The dominator tree children of a basic block B are the blocks dominated by B.See
BasicBlock.dominatorsfor the definition of a dominator.
- propertydominators:List[BasicBlock]¶
List of dominators for this basic block (read-only).
A dominator of a basic block B is a block that must be executed before B can be executed.In other words, every path from the entry block to B must go through the dominator.This includes B itself - every block dominates itself. See
BasicBlock.strict_dominatorsfor dominators that don’t include B.
- propertyfunction_graph_type:FunctionGraphType¶
Type of function graph from which this block represents instructions
- propertyhas_undetermined_outgoing_edges:bool¶
Whether basic block has undetermined outgoing edges (read-only)
- propertyhighlight:HighlightColor¶
Gets or sets the highlight color for basic block
- Example:
>>>current_basic_block.highlight=HighlightStandardColor.BlueHighlightColor>>>current_basic_block.highlight<color: blue>
- propertyil_function:_function.ILFunctionType|None¶
IL Function of which this block is a part, if the block is part of an IL Function.
- propertyil_function_if_available:_function.ILFunctionType|None¶
IL Function of which this block is a part, if the block is part of an IL Function, and if the function has generated IL already.
- propertyimmediate_dominator:BasicBlock|None¶
Immediate dominator of this basic block (read-only)
The immediate dominator of a basic block B is the dominator closest to B in the control flow graph.In other words, among all dominators of B, it is the dominator that doesn’t dominate any otherdominator of B except itself. Each basic block except the entry block has a unique immediate dominator.
- propertyimmediate_post_dominator:BasicBlock|None¶
Immediate post-dominator of this basic block (read-only)
The immediate post-dominator of a basic block B is the post-dominator closest to B in the control flow graph.In other words, among all post-dominators of B, it is the post-dominator that doesn’t post-dominate any otherpost-dominator of B except itself.If B has outgoing edges that can lead to different exit blocks, then this will not exist.
- propertyincoming_edges:List[BasicBlockEdge]¶
List of basic block incoming edges (read-only)
- propertyoutgoing_edges:List[BasicBlockEdge]¶
List of basic block outgoing edges (read-only)
- propertypost_dominance_frontier:List[BasicBlock]¶
Post-dominance frontier for this basic block (read-only)
The post-dominance frontier of a basic block B is the set of blocks that are not strictly post-dominatedby B, but have at least one successor that is post-dominated by B. In other words, it contains the blockswhere B’s post-dominance “stops” - the blocks that have at least one successor not post-dominated by B,while having another successor that is post-dominated by B.
- propertypost_dominator_tree_children:List[BasicBlock]¶
List of child blocks in the post-dominator tree for this basic block (read-only)
The post-dominator tree children of a basic block B are the blocks post-dominated by B.See
BasicBlock.post_dominatorsfor the definition of a post-dominator.
- propertypost_dominators:List[BasicBlock]¶
List of post-dominators for this basic block (read-only)
A post-dominator of a basic block B is a block that must be executed after B is executed.In other words, every path from B to an exit block must go through the post-dominator.This includes B itself - every block post-dominates itself. See
BasicBlock.strict_post_dominatorsfor post-dominators that don’t include B.If B has outgoing edges that can lead to different exit blocks, then this will only include B.
- propertysource_block:BasicBlock|None¶
The corresponding assembly-level basic block for this basic block (read-only)
- propertystrict_dominators:List[BasicBlock]¶
List of strict dominators for this basic block (read-only)
A strict dominator of a basic block B is a dominator of B that is not B itself.See
BasicBlock.dominatorsfor the definition of a dominator.
- propertystrict_post_dominators:List[BasicBlock]¶
List of strict post-dominators for this basic block (read-only)
A strict post-dominator of a basic block B is a post-dominator of B that is not B itself.See
BasicBlock.post_dominatorsfor the definition of a post-dominator.
- propertyview:BinaryView|None¶
BinaryView that contains the basic block (read-only)
BasicBlockEdge¶
- classBasicBlockEdge[source]¶
Bases:
objectclassBasicBlockEdgerepresents the edges that connect basic blocks in graph view.- Variables:
type – The
enums.BranchTypeof the edge; Whether the edge is a true branch, false branch, unconditional, etc.source – The basic block that the edge originates from.
target – The basic block that the edge is going to.
backedge – Whether this edge targets to a node whose control flow can eventually flow back through the source node of this edge.
- Example:
>>>current_basic_block.outgoing_edges[<TrueBranch: x86_64@0x6>, <FalseBranch: x86_64@0x1f>]
- __init__(type:BranchType,source:BasicBlock,target:BasicBlock,back_edge:bool,fall_through:bool)→None¶
- Parameters:
type (BranchType) –
source (BasicBlock) –
target (BasicBlock) –
back_edge (bool) –
fall_through (bool) –
- Return type:
None
- source:BasicBlock¶
- target:BasicBlock¶
- type:BranchType¶
PendingBasicBlockEdge¶
- classPendingBasicBlockEdge[source]¶
Bases:
objectclassPendingBasicBlockEdgerepresents a pending edge that has not yet been resolved.- Variables:
type – The edge branch type.
arch – The architecture of the target basic block.
target – The address of the target basic block.
fall_through – Whether this edge is a fallthrough edge.
- __init__(type:BranchType,arch:Architecture,target:int,fallthrough:bool)→None¶
- Parameters:
type (BranchType) –
arch (Architecture) –
target (int) –
fallthrough (bool) –
- Return type:
None
- arch:Architecture¶
- type:BranchType¶