B2R2


CFGEdgeKind Type

TODO: Make DU types for Call, Jmp, FallThrough edges We distinguish edges of a CFG by classifying them into several kinds.

Union cases

Union case Description

CallEdge

Full Usage: CallEdge

An edge of a regular call instruction.

CallFallThroughEdge

Full Usage: CallFallThroughEdge

A fall-through after a call instruction. This is indeed a pseudo edge as there's no direct control flow from a call instruction to its fall-through.

ExceptionFallThroughEdge

Full Usage: ExceptionFallThroughEdge

A fall-through representing C++ exception flows. If there is a function call which causes raising exceptions, then this edge will be used.

ExternalCallEdge

Full Usage: ExternalCallEdge

An edge of a call instruction to an external function or PLT.

ExternalJmpEdge

Full Usage: ExternalJmpEdge

An edge of a jmp instruction to an external function or PLT.

FallThroughEdge

Full Usage: FallThroughEdge

A simple fall-through case. This type is created when an edge cuts in two consecutive instructions.

ImplicitCallEdge

Full Usage: ImplicitCallEdge

An implicit edge that is not explicitly visible from the current CALL instruction, but visible within the function. If there is a path in the callee that calls a function, then we create an implicit edge from a caller to any of the callees.

IndirectCallEdge

Full Usage: IndirectCallEdge

An edge from an indirect call instruction.

IndirectJmpEdge

Full Usage: IndirectJmpEdge

An edge from an indirect jmp instruction.

InterCJmpFalseEdge

Full Usage: InterCJmpFalseEdge

An edge of a conditional jump that is exercised when the condition is false.

InterCJmpTrueEdge

Full Usage: InterCJmpTrueEdge

An edge of a conditional jump that is exercised when the condition is true.

InterJmpEdge

Full Usage: InterJmpEdge

An edge of a direct jump, e.g., JMP +0x42.

IntraCJmpFalseEdge

Full Usage: IntraCJmpFalseEdge

A false conditional edge only visible from an IR-level CFG, because there is a control-flow inside a machine instruction.

IntraCJmpTrueEdge

Full Usage: IntraCJmpTrueEdge

A true conditional edge only visible from an IR-level CFG, because there is a control-flow inside a machine instruction.

IntraJmpEdge

Full Usage: IntraJmpEdge

A direct jump edge only visible from an IR-level CFG, because there is a control-flow inside a machine instruction.

NoReturnFallThroughEdge

Full Usage: NoReturnFallThroughEdge

A fall-through after a no return call instruction. This edge will never be executed. We have this edge to include all "codes" compiler emitted. If we do not consider such "unreachable" codes from CFG building, we'll never see this edge in the result CFG.

RecursiveCallEdge

Full Usage: RecursiveCallEdge

An edge of a recursive call instruction.

RetEdge

Full Usage: RetEdge

An edge of a function return.

UnknownEdge

Full Usage: UnknownEdge

Unknown edge type. This should be an error case.