summaryrefslogtreecommitdiff
path: root/rust/examples/flowgraph/src
diff options
context:
space:
mode:
Diffstat (limited to 'rust/examples/flowgraph/src')
-rw-r--r--rust/examples/flowgraph/src/lib.rs52
1 files changed, 52 insertions, 0 deletions
diff --git a/rust/examples/flowgraph/src/lib.rs b/rust/examples/flowgraph/src/lib.rs
new file mode 100644
index 00000000..e0c47d9f
--- /dev/null
+++ b/rust/examples/flowgraph/src/lib.rs
@@ -0,0 +1,52 @@
+use binaryninja::binaryview::{BinaryView, BinaryViewExt};
+use binaryninja::command::register;
+use binaryninja::disassembly::{
+ DisassemblyTextLine, InstructionTextToken, InstructionTextTokenType,
+};
+use binaryninja::flowgraph::{
+ BranchType, EdgePenStyle, EdgeStyle, FlowGraph, FlowGraphNode, ThemeColor,
+};
+
+fn test_graph(view: &BinaryView) {
+ let graph = FlowGraph::new();
+
+ let disassembly_lines_a = vec![DisassemblyTextLine::from(vec![
+ InstructionTextToken::new(InstructionTextTokenType::TextToken, "Li"),
+ InstructionTextToken::new(InstructionTextTokenType::TextToken, "ne"),
+ InstructionTextToken::new(InstructionTextTokenType::TextToken, " 1"),
+ ])];
+
+ let node_a = FlowGraphNode::new(&graph);
+ node_a.set_disassembly_lines(&disassembly_lines_a);
+
+ let node_b = FlowGraphNode::new(&graph);
+ let disassembly_lines_b = vec![DisassemblyTextLine::from(&vec!["Li", "ne", " 2"])];
+ node_b.set_disassembly_lines(&disassembly_lines_b);
+
+ let node_c = FlowGraphNode::new(&graph);
+ node_c.set_lines(vec!["Line 3", "Line 4", "Line 5"]);
+
+ graph.append(&node_a);
+ graph.append(&node_b);
+ graph.append(&node_c);
+
+ let edge = EdgeStyle::new(EdgePenStyle::DashDotDotLine, 2, ThemeColor::AddressColor);
+ node_a.add_outgoing_edge(BranchType::UserDefinedBranch, &node_b, &edge);
+ node_a.add_outgoing_edge(
+ BranchType::UnconditionalBranch,
+ &node_c,
+ &EdgeStyle::default(),
+ );
+
+ view.show_graph_report("Rust Graph Title", graph);
+}
+
+#[no_mangle]
+pub extern "C" fn UIPluginInit() -> bool {
+ register(
+ "Rust Graph Test Title",
+ "Rust Graph Test Description",
+ test_graph,
+ );
+ true
+}