Class |
Description |
|---|---|
|
|
|
|
Bases: FlowGraph
update can be overridden by subclasses to allow a graph to be updated after it has been
presented in the UI. This will automatically occur if the function referenced by the function
property has been updated.
Return a new FlowGraph object with the new information if updates are desired. If the graph
does not need updating, None can be returned to leave the graph in its current state.
Updated graph, or None
Bases: object
style (EdgePenStyle | None) –
width (int | None) –
theme_color (ThemeColor | None) –
Bases: object
class FlowGraph implements 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
>>> edge = EdgeStyle(EdgePenStyle.DashDotDotLine, 2, ThemeColor.AddressColor)
>>> node_a.add_outgoing_edge(BranchType.UserDefinedBranch, node_b, edge)
>>> 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.
handle (LP_BNCustomFlowGraph | None) –
Add a Render Layer to be applied to this Flow Graph. Note that layers will be applied in the order in which they are added.
layer (RenderLayer) – Render Layer to add
append adds a node to a flow graph.
Note
After the graph has completed layout, this function has no effect.
node (FlowGraphNode) – Node to add
Index of node
clear clears all the nodes in the graph
Note
After the graph has completed layout, this function has no effect.
complete_layout can be overridden by subclasses and is called when a graph layout is completed.
finish_prepare_for_layout signals that preparations for rendering a graph are complete.
This method should only be called by a prepare_for_layout reimplementation.
layout starts rendering a graph for display. Once a layout is complete, each node will contain
coordinates and extents that can be used to render a graph with minimum additional computation.
This function does not wait for the graph to be ready to display, but a callback can be provided
to signal when the graph is ready.
callback (callback) – Function to be called when the graph is ready to display
Pending flow graph layout request object
layout_and_wait starts rendering a graph for display, and waits for the graph to be ready to
display. After this function returns, each node will contain coordinates and extents that can be
used to render a graph with minimum additional computation.
Do not use this API on the UI thread (use layout with a callback instead).
populate_nodes can be overridden by subclasses to create nodes in a graph when a flow
graph needs to be rendered. This will happen on a worker thread and will not block the UI.
prepare_for_layout can 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. If
this function is overridden, the finish_prepare_for_layout method must be called once
preparations are completed.
Remove a Render Layer from being applied to this Flow Graph
layer (RenderLayer) – Render Layer to remove
replace replaces an existing node in the graph with a new node.
Any existing edges referencing the old node will be updated to point to
the new node.
Note
After the graph has completed layout, this function has no effect.
index – Index of the node to replace
node – New node with which to replace the old node
show displays the graph in a new tab in the UI.
title (str) – Title to show in the new tab
update can be overridden by subclasses to allow a graph to be updated after it has been
presented in the UI. This will automatically occur if the function referenced by the function
property has been updated.
Return a new FlowGraph object with the new information if updates are desired. If the graph
does not need updating, None can be returned to leave the graph in its current state.
Updated graph, or None
Set if flow graph should allow inline instruction editing (assembly only)
Set if flow graph should allow modification of code from within the graph view
Whether flow graph layout is complete (read-only)
Function for a flow graph
Whether the flow graph has at least one node (read-only)
Flow graph height
Set if flow graph includes comments made by the user
Set if flow graph should make use of address information
Set if flow graph should be treated as a workflow graph
List of nodes in graph (read-only)
Get the list of Render Layers which will be applied to this Flow Graph, after it calls populate_nodes. :return: List of Render Layers
Set if flow graph should highlight associated registers in the UI
Set if flow graph uses the standard basic block highlighting settings
Set if flow graph uses the standard instruction highlighting settings
Binary view for a flow graph
Flow graph width
Bases: object
branch_type (BranchType | int) –
source (FlowGraphNode) –
target (FlowGraphNode) –
back_edge (bool) –
style (EdgeStyle) –
Bases: object
handle (BNCustomFlowGraphLayout | None) –
graph (FlowGraph) –
nodes (List[FlowGraphNode]) –
Bases: object
graph (FlowGraph | None) –
add_outgoing_edge connects two flow graph nodes with an edge.
edge_type (BranchType) – Type of edge to add
target (FlowGraphNode) – Target node object
style (EdgeStyle) – (optional) Styling for graph edge Branch Type must be set to UserDefinedBranch
Basic block associated with this part of the flow graph (well not automatically cause the node to render as a native basic block)
Flow graph block height (read-only)
Gets or sets the highlight color for the node
>>> g = FlowGraph()
>>> node = FlowGraphNode(g)
>>> node.highlight = HighlightStandardColor.BlueHighlightColor
>>> node.highlight
<color: blue>
Flow graph block list of incoming edges (read-only)
Flow graph block list of text lines
Flow graph block list of outgoing edges (read-only)
Flow graph block width (read-only)
Flow graph block X
Flow graph block Y