summaryrefslogtreecommitdiff
path: root/rust/src/binaryview.rs
diff options
context:
space:
mode:
authorRusty Wagner <rusty.wagner@gmail.com>2023-01-24 18:38:13 -0700
committerRusty Wagner <rusty.wagner@gmail.com>2023-01-30 11:57:43 -0500
commita3939bdec15f9299ae9a681255fa93c47113870a (patch)
tree2b4bb5643ac3cd25a618a99a542968fe81c66bcc /rust/src/binaryview.rs
parentcf4220570c2d1b7105fb29719383f64026d46837 (diff)
Fix UAF on C++ BinaryView plugin init, improve demangler and BinaryView APIs
Diffstat (limited to 'rust/src/binaryview.rs')
-rw-r--r--rust/src/binaryview.rs45
1 files changed, 43 insertions, 2 deletions
diff --git a/rust/src/binaryview.rs b/rust/src/binaryview.rs
index 26b0bae2..aab920d2 100644
--- a/rust/src/binaryview.rs
+++ b/rust/src/binaryview.rs
@@ -622,9 +622,50 @@ pub trait BinaryViewExt: BinaryViewBase {
}
}
- fn add_auto_function(&self, plat: &Platform, addr: u64) {
+ fn add_auto_function(&self, plat: &Platform, addr: u64) -> Option<Ref<Function>> {
unsafe {
- BNAddFunctionForAnalysis(self.as_ref().handle, plat.handle, addr);
+ let handle = BNAddFunctionForAnalysis(
+ self.as_ref().handle,
+ plat.handle,
+ addr,
+ false,
+ ptr::null_mut(),
+ );
+
+ if handle.is_null() {
+ return None;
+ }
+
+ Some(Function::from_raw(handle))
+ }
+ }
+
+ fn add_function_with_type(
+ &self,
+ plat: &Platform,
+ addr: u64,
+ auto_discovered: bool,
+ func_type: Option<&Type>,
+ ) -> Option<Ref<Function>> {
+ unsafe {
+ let func_type = match func_type {
+ Some(func_type) => func_type.handle,
+ None => ptr::null_mut(),
+ };
+
+ let handle = BNAddFunctionForAnalysis(
+ self.as_ref().handle,
+ plat.handle,
+ addr,
+ auto_discovered,
+ func_type,
+ );
+
+ if handle.is_null() {
+ return None;
+ }
+
+ Some(Function::from_raw(handle))
}
}