summaryrefslogtreecommitdiff
path: root/rust/examples/mlil_visitor
diff options
context:
space:
mode:
Diffstat (limited to 'rust/examples/mlil_visitor')
-rw-r--r--rust/examples/mlil_visitor/Cargo.toml16
-rw-r--r--rust/examples/mlil_visitor/build.rs68
-rw-r--r--rust/examples/mlil_visitor/src/main.rs137
3 files changed, 0 insertions, 221 deletions
diff --git a/rust/examples/mlil_visitor/Cargo.toml b/rust/examples/mlil_visitor/Cargo.toml
deleted file mode 100644
index 76ca1222..00000000
--- a/rust/examples/mlil_visitor/Cargo.toml
+++ /dev/null
@@ -1,16 +0,0 @@
-[package]
-name = "mlil_visitor"
-version = "0.1.0"
-edition = "2021"
-
-# Uncomment this if you're writing a plugin (plugins are shared objects loaded by the core):
-# [lib]
-# crate-type = ["cdylib"]
-
-# You can point at the BinaryNinja dependency in one of two ways, via path:
-[dependencies]
-binaryninja = {path="../../"}
-
-# Or directly at the git repo:
-# [dependencies]
-# binaryninja = {git = "https://github.com/Vector35/binaryninja-api.git", branch = "dev"}
diff --git a/rust/examples/mlil_visitor/build.rs b/rust/examples/mlil_visitor/build.rs
deleted file mode 100644
index 5ba9bcde..00000000
--- a/rust/examples/mlil_visitor/build.rs
+++ /dev/null
@@ -1,68 +0,0 @@
-use std::env;
-use std::fs::File;
-use std::io::BufReader;
-use std::path::PathBuf;
-
-#[cfg(target_os = "macos")]
-static LASTRUN_PATH: (&str, &str) = ("HOME", "Library/Application Support/Binary Ninja/lastrun");
-
-#[cfg(target_os = "linux")]
-static LASTRUN_PATH: (&str, &str) = ("HOME", ".binaryninja/lastrun");
-
-#[cfg(windows)]
-static LASTRUN_PATH: (&str, &str) = ("APPDATA", "Binary Ninja\\lastrun");
-
-// Check last run location for path to BinaryNinja; Otherwise check the default install locations
-fn link_path() -> PathBuf {
- use std::io::prelude::*;
-
- let home = PathBuf::from(env::var(LASTRUN_PATH.0).unwrap());
- let lastrun = PathBuf::from(&home).join(LASTRUN_PATH.1);
-
- File::open(lastrun)
- .and_then(|f| {
- let mut binja_path = String::new();
- let mut reader = BufReader::new(f);
-
- reader.read_line(&mut binja_path)?;
- Ok(PathBuf::from(binja_path.trim()))
- })
- .unwrap_or_else(|_| {
- #[cfg(target_os = "macos")]
- return PathBuf::from("/Applications/Binary Ninja.app/Contents/MacOS");
-
- #[cfg(target_os = "linux")]
- return home.join("binaryninja");
-
- #[cfg(windows)]
- return PathBuf::from(env::var("PROGRAMFILES").unwrap())
- .join("Vector35\\BinaryNinja\\");
- })
-}
-
-fn main() {
- // Use BINARYNINJADIR first for custom BN builds/configurations (BN devs/build server), fallback on defaults
- let install_path = env::var("BINARYNINJADIR")
- .map(PathBuf::from)
- .unwrap_or_else(|_| link_path());
-
- #[cfg(target_os = "linux")]
- println!(
- "cargo:rustc-link-arg=-Wl,-rpath,{},-L{},-l:libbinaryninjacore.so.1",
- install_path.to_str().unwrap(),
- install_path.to_str().unwrap(),
- );
-
- #[cfg(target_os = "macos")]
- println!(
- "cargo:rustc-link-arg=-Wl,-rpath,{},-L{},-lbinaryninjacore",
- install_path.to_str().unwrap(),
- install_path.to_str().unwrap(),
- );
-
- #[cfg(target_os = "windows")]
- {
- println!("cargo:rustc-link-lib=binaryninjacore");
- println!("cargo:rustc-link-search={}", install_path.to_str().unwrap());
- }
-}
diff --git a/rust/examples/mlil_visitor/src/main.rs b/rust/examples/mlil_visitor/src/main.rs
deleted file mode 100644
index 752548c9..00000000
--- a/rust/examples/mlil_visitor/src/main.rs
+++ /dev/null
@@ -1,137 +0,0 @@
-use std::env;
-
-use binaryninja::architecture::Intrinsic;
-use binaryninja::binaryview::BinaryViewExt;
-use binaryninja::mlil::MediumLevelILLiftedOperand;
-use binaryninja::mlil::{MediumLevelILFunction, MediumLevelILLiftedInstruction};
-use binaryninja::types::Variable;
-
-fn print_indent(indent: usize) {
- print!("{:<indent$}", "")
-}
-
-fn print_operation(operation: &MediumLevelILLiftedInstruction) {
- print!("{}", operation.name());
-}
-
-fn print_variable(func: &MediumLevelILFunction, var: &Variable) {
- print!("{}", func.get_function().get_variable_name(var));
-}
-
-fn print_il_expr(instr: &MediumLevelILLiftedInstruction, mut indent: usize) {
- print_indent(indent);
- print_operation(instr);
- println!();
-
- indent += 1;
-
- use MediumLevelILLiftedOperand::*;
- for (_name, operand) in instr.operands() {
- match operand {
- Int(int) => {
- print_indent(indent);
- println!("int 0x{:x}", int);
- }
- Float(float) => {
- print_indent(indent);
- println!("int {:e}", float);
- }
- Expr(expr) => print_il_expr(&expr, indent),
- Var(var) => {
- print_indent(indent);
- print!("var ");
- print_variable(&instr.function, &var);
- println!();
- }
- VarSsa(var) => {
- print_indent(indent);
- print!("ssa var ");
- print_variable(&instr.function, &var.variable);
- println!("#{}", var.version);
- }
- IntList(list) => {
- print_indent(indent);
- print!("index list ");
- for i in list {
- print!("{i} ");
- }
- println!();
- }
- VarList(list) => {
- print_indent(indent);
- print!("var list ");
- for i in list {
- print_variable(&instr.function, &i);
- print!(" ");
- }
- println!();
- }
- VarSsaList(list) => {
- print_indent(indent);
- print!("ssa var list ");
- for i in list {
- print_variable(&instr.function, &i.variable);
- print!("#{} ", i.version);
- }
- println!();
- }
- ExprList(list) => {
- print_indent(indent);
- println!("expr list");
- for i in list {
- print_il_expr(&i, indent + 1);
- }
- }
- TargetMap(list) => {
- print_indent(indent);
- print!("target map ");
- for (i, f) in list {
- print!("({i}, {f}) ");
- }
- println!();
- }
- ConstantData(_) => println!("contantdata"),
- Intrinsic(intrinsic) => println!("intrinsic {}", intrinsic.name()),
- }
- }
-}
-
-// Standalone executables need to provide a main function for rustc
-// Plugins should refer to `binaryninja::command::*` for the various registration callbacks.
-fn main() {
- let mut args = env::args();
- let _ = args.next().unwrap();
- let Some(filename) = args.next() else {
- panic!("Expected input filename\n");
- };
-
- // This loads all the core architecture, platform, etc plugins
- // Standalone executables probably need to call this, but plugins do not
- println!("Loading plugins...");
- let _headless_session = binaryninja::headless::Session::new();
-
- // Your code here...
- println!("Loading binary...");
- let bv = binaryninja::load(filename).expect("Couldn't open binary file");
-
- // Go through all functions in the binary
- for func in bv.functions().iter() {
- let sym = func.symbol();
- println!("Function {}:", sym.full_name());
-
- let Ok(il) = func.medium_level_il() else {
- println!(" Does not have MLIL\n");
- continue;
- };
-
- // Loop through all blocks in the function
- for block in il.basic_blocks().iter() {
- // Loop though each instruction in the block
- for instr in block.iter() {
- // Generically parse the IL tree and display the parts
- print_il_expr(&instr.lift(), 2);
- }
- }
- println!();
- }
-}