From 604a22a0050c000ed4d142589c9ce0e34ee7b570 Mon Sep 17 00:00:00 2001 From: Brandon Miller Date: Tue, 20 May 2025 15:49:11 -0400 Subject: Rust bindings for custom basic block analysis --- rust/src/llvm.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 rust/src/llvm.rs (limited to 'rust/src/llvm.rs') diff --git a/rust/src/llvm.rs b/rust/src/llvm.rs new file mode 100644 index 00000000..f74d00e3 --- /dev/null +++ b/rust/src/llvm.rs @@ -0,0 +1,23 @@ +use binaryninjacore_sys::BNLlvmServicesDisasmInstruction; +use std::ffi::CStr; + +pub fn disas_instruction(triplet: &str, data: &[u8], address64: u64) -> Option<(usize, String)> { + unsafe { + let mut buf = vec![0; 256]; + let instr_len = BNLlvmServicesDisasmInstruction( + triplet.as_ptr() as *const i8, + data.as_ptr() as *mut u8, + data.len() as i32, + address64, + buf.as_mut_ptr() as *mut i8, + buf.len(), + ); + if instr_len > 0 { + let cstr = CStr::from_ptr(buf.as_ptr() as *const i8); + let string = cstr.to_str().unwrap().to_string(); + Some((instr_len as usize, string)) + } else { + None + } + } +} -- cgit v1.3.1