B2R2


B2R2.MiddleEnd.ControlFlowAnalysis Namespace

Type/Module Description

BasicCFGEvent

A basic event that triggers CFG modifications.

BBLInfo (Module)

BBLInfo (Type)

Represents an instruction-level basic block.

BranchPattern

CalleeKind

Callee's kind.

CFGBuilder

This is the main class for building a CFG from a given binary.

CFGError (Module)

CFGError (Type)

Error occured from a CFG analysis.

CFGEvents (Module)

CFGEvents (Type)

List of CFGEvents. We divide events into three groups: (1) basic events, (2) callee-analysis events, and (3) per-function-analysis events. The basic events are essential ones for building regular CFGs. The callee-analysis events are to detect mutually recursive callee analysis events. The function-analysis events are to perform per-function analysis in order to recover high-level CFG information, such as no-return information, and indirect branch targets.

CodeManager

CodeManager manages all the processed information about the binary code including *parsed* instructions, their basic blocks, functions, as well as exception handling routines.

CoverageMaintainer

Maintain the address-level coverage information, and thereby, gap information.

DataManager

DisasmLens

A graph lens for obtaining DisasmCFG.

DisasmVMap

A mapping from an address to a DisasmCFG vertex.

EvalHelper

EVMCodeCopyAnalysis

ExceptionTable

ExceptionTable holds parsed exception information of a binary code (given by the BinHandle).

ExternalFunction

External function is a function that is defined in another binary. Functions in PLT is also considered as an external function, and we always link a PLT entry with its corresponding GOT entry to consider such a pair as an external function, where its entry is located at the GOT and its trampoline is at the PLT.

FakeEdge

FakeEdge is a tuple of (Callsite address, Call target address). This is to uniquely identify edges from a call instruction to a fake block. Note that even though there are multiple calls to the same outer function, each of the callsites should be connected to an independent fake block. That's the reason why we use FakeEdge to distinguish them.

Function

Function is a non-overlapping chunk of code in a binary. We do not allow function overlaps. When there exist two functions sharing common basic blocks, B2R2 will create a new function to represent the common blocks. Function can also represent a function defined outside of the current binary. Such functions are called ExternalFunction.

FunctionKind

Function can be either external or regualr.

FunctionMaintainer

Maintains functions in the binary.

HistoricalFact

To support the rollback mechanism, we remember inter-function edges created during the recovery of an indirect branch. If a vertex has been promoted due to such an edge, and the edge has turned out to be invalid, then we should be able to revert the promotion.

HistoryManager

Record and manage the CFG recovery history.

ICFGBuildable

The main interface for building a CFG.

IndirectCallResolution

IndirectCallResolution tries to find indirect call target by constant propagation. We should fix this if we meet a table-like indirect call targets.

IndirectJumpKind

Indirect jump's kind.

IndirectJumpResolution

IndirectJumpResolution recovers jump targets of indirect jumps by inferring their jump tables. It first identifies jump table bases with constant propagation and recovers the entire table ranges by leveraging the structural properties of the binary.

IPluggableAnalysis

Pluggable analysis interface. Any CFG-related analysis implementing this interface can be plugged in or unplugged from the BinEssence.

JumpTable

Indirect branch jump table information.

JumpTableMaintainer

LabelIdentifier

Since Symbol is only unique within an instruction, it is necessary to tag it with the instruction address that holds the symbol.

LibcAnalysis

NoReturnDecision (Module)

NoReturnDecision (Type)

NoReturnFunctionIdentification

NoReturnFunctionIdentification has two roles: (1) identify whether a function is non-returning or not, and (2) add return and fall-through edges if callee function is non-returning.

NoReturnProperty

NoReturnProperty of a function specifies whether the function will eventually return or not. Some functions, e.g., exit, will never return in any cases, and compilers often remove fall-through edges of callers of such functions.

PerFunctionAnalysis (Module)

Helper module for per-function analyses.

PerFunctionAnalysis (Type)

PerFunctionAnalysis implements a core CFG-recovery algorithm, which modifies a function-level CFG by analyzing the function. Though it works per function, It can modify other functions (thus, the entire CFGInfo). An analysis appends CFGEvents to modify function, but it can also modify the function directly.

RegularFunction

Regular function is a function that has its own body in the target binary. Therefore, regular functions have their own IR-level CFG.

SpeculativeGapCompletion

SSAPromotion

TempInfo

Temporary information obtained by parsing a block (bbl) of instructions, such as IR-level leaders and auxiliary information about an instruction-level basic block. This information is necessary to construct a (IR-level) CFG. Normally, a single instruction-level bbl represents a single IR-level basic block, but if there exist intra-instruction control flows, it can have multiple intra blocks.