basicblock module

Class

Description

binaryninja.basicblock.BasicBlock

TheclassBasicBlock object is returned during analysis and should not be directly instantiated.

binaryninja.basicblock.BasicBlockEdge

classBasicBlockEdge represents the edges that connect basic blocks in graph view.

binaryninja.basicblock.PendingBasicBlockEdge

classPendingBasicBlockEdge represents a pending edge that has not yet been resolved.

BasicBlock

classBasicBlock[source]

Bases:object

TheclassBasicBlock object 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_text returns 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:

List[DisassemblyTextLine]

get_instruction_containing_address(addr:int)Tuple[bool,int][source]
Parameters:

addr (int) –

Return type:

Tuple[bool,int]

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.

Returns:

Raw instruction data as bytes.

Parameters:

addr (int) –

Return type:

bytes

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:

List[BasicBlock]

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:

list[PendingBasicBlockEdge]

mark_recent_use()None[source]
Return type:

None

set_auto_highlight(color:HighlightColor)None[source]

set_auto_highlight highlights 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_highlight highlights 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)

propertycan_exit:bool

Whether basic block can return or is tagged as ‘No Return’ (read-only)

propertydisassembly_text:List[DisassemblyTextLine]

disassembly_text property 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.SeeBasicBlock.dominators for 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. SeeBasicBlock.strict_dominators for dominators that don’t include B.

propertyend:int

Basic block end (read-only)

propertyfallthrough_to_function:bool

Whether the basic block has a fallthrough edge to a function.

propertyfunction:Function|None

Basic block function (read-only)

propertyfunction_graph_type:FunctionGraphType

Type of function graph from which this block represents instructions

propertyhas_invalid_instructions:bool

Whether basic block has any invalid instructions (read-only)

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)

propertyindex:int

Basic block index in list of blocks for the function (read-only)

propertyinstruction_count:int
propertyis_high_level_il:bool

Whether the basic block contains High Level IL

propertyis_il:bool

Whether the basic block contains IL

propertyis_low_level_il:bool

Whether the basic block contains Low Level IL

propertyis_medium_level_il:bool

Whether the basic block contains Medium Level IL

propertylength:int

Basic block length (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.SeeBasicBlock.post_dominators for 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. SeeBasicBlock.strict_post_dominators for 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)

propertystart:int

Basic block start (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.SeeBasicBlock.dominators for 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.SeeBasicBlock.post_dominators for the definition of a post-dominator.

propertyview:BinaryView|None

BinaryView that contains the basic block (read-only)

BasicBlockEdge

classBasicBlockEdge[source]

Bases:object

classBasicBlockEdge represents the edges that connect basic blocks in graph view.

Variables:
  • type – Theenums.BranchType of 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:
Return type:

None

back_edge:bool
fall_through:bool
source:BasicBlock
target:BasicBlock
type:BranchType

PendingBasicBlockEdge

classPendingBasicBlockEdge[source]

Bases:object

classPendingBasicBlockEdge represents 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:
Return type:

None

arch:Architecture
fallthrough:bool
target:int
type:BranchType