summaryrefslogtreecommitdiff
path: root/rust/src/llvm.rs
diff options
context:
space:
mode:
Diffstat (limited to 'rust/src/llvm.rs')
-rw-r--r--rust/src/llvm.rs23
1 files changed, 23 insertions, 0 deletions
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
+ }
+ }
+}