binaryninja.flowgraph.FlowGraph¶
-
class
FlowGraph(handle=None)[source]¶ class FlowGraphimplements a directed flow graph to be shown in the UI. This class allows plugins to create custom flow graphs and render them in the UI using the flow graph report API.An example of creating a flow graph and presenting it in the UI:
>>> graph = FlowGraph() >>> node_a = FlowGraphNode(graph) >>> node_a.lines = ["Node A"] >>> node_b = FlowGraphNode(graph) >>> node_b.lines = ["Node B"] >>> node_c = FlowGraphNode(graph) >>> node_c.lines = ["Node C"] >>> graph.append(node_a) 0 >>> graph.append(node_b) 1 >>> graph.append(node_c) 2 >>> node_a.add_outgoing_edge(BranchType.UnconditionalBranch, node_b) >>> node_a.add_outgoing_edge(BranchType.UnconditionalBranch, node_c) >>> show_graph_report("Custom Graph", graph)
Note
In the current implementation, only graphs that have a single start node where all other nodes are reachable from outgoing edges can be rendered correctly. This describes the natural limitations of a control flow graph, which is what the rendering logic was designed for. Graphs that have nodes that are only reachable from incoming edges, or graphs that have disjoint subgraphs will not render correctly. This will be fixed in a future version.
Methods
__init__([handle])x.__init__(…) initializes x; see help(type(x)) for signature append(node)appendadds a node to a flow graph.complete_layout()complete_layoutcan be overridden by subclasses and is called when a graph layout is completed.finish_prepare_for_layout()finish_prepare_for_layoutsignals that preparations for rendering a graph are complete.get_nodes_in_region(left, top, right, bottom)layout([callback])layoutstarts rendering a graph for display.layout_and_wait()layout_and_waitstarts rendering a graph for display, and waits for the graph to be ready to display.populate_nodes()prepare_for_layoutcan be overridden by subclasses to create nodes in a graph when a flow graph needs to be rendered.prepare_for_layout()prepare_for_layoutcan be overridden by subclasses to handling preparations that must take place before a flow graph is rendered, such as waiting for a function to finish analysis.show(title)showdisplays the graph in a new tab in the UI.update()updatecan be overridden by subclasses to allow a graph to be updated after it has been presented in the UI.Attributes
completeWhether flow graph layout is complete (read-only) functionFunction for a flow graph has_nodesWhether the flow graph has at least one node (read-only) heightFlow graph height (read-only) horizontal_block_marginil_functionis_ilis_low_level_ilis_medium_level_ilnodesList of nodes in graph (read-only) vertical_block_marginwidthFlow graph width (read-only)