From 6325884782a47e0c89154cf7ce0952368e25ea2a Mon Sep 17 00:00:00 2001 From: KyleMiles Date: Tue, 18 Apr 2023 12:38:09 -0400 Subject: DWARF Import DebugInfo Plugin Resolves #3206 --- rust/src/lib.rs | 1 + rust/src/string.rs | 6 ++++++ rust/src/templatesimplifier.rs | 15 +++++++++++++++ 3 files changed, 22 insertions(+) create mode 100644 rust/src/templatesimplifier.rs (limited to 'rust/src') diff --git a/rust/src/lib.rs b/rust/src/lib.rs index f5d96592..7039a69d 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -162,6 +162,7 @@ pub mod settings; pub mod string; pub mod symbol; pub mod tags; +pub mod templatesimplifier; pub mod types; use std::path::PathBuf; diff --git a/rust/src/string.rs b/rust/src/string.rs index 21972b34..5bfddcee 100644 --- a/rust/src/string.rs +++ b/rust/src/string.rs @@ -33,6 +33,8 @@ pub(crate) fn raw_to_string(ptr: *const raw::c_char) -> Option { } } +/// These are strings that the core will both allocate and free. +/// We just have a reference to these strings and want to be able use them, but aren't responsible for cleanup #[derive(PartialEq, Eq, PartialOrd, Ord, Hash, Debug)] #[repr(C)] pub struct BnStr { @@ -95,6 +97,10 @@ pub struct BnString { /// Received from a variety of core function calls, and /// must be used when giving strings to the core from many /// core-invoked callbacks. +/// +/// These are strings we're responsible for freeing, such as +/// strings allocated by the core and given to us through the API +/// and then forgotten about by the core. impl BnString { pub fn new(s: S) -> Self { use binaryninjacore_sys::BNAllocString; diff --git a/rust/src/templatesimplifier.rs b/rust/src/templatesimplifier.rs new file mode 100644 index 00000000..2f7bba92 --- /dev/null +++ b/rust/src/templatesimplifier.rs @@ -0,0 +1,15 @@ +use crate::{ + string::{BnStrCompatible, BnString}, + types::{QualifiedName}, +}; +use binaryninjacore_sys::{BNRustSimplifyStrToFQN, BNRustSimplifyStrToStr}; + +pub fn simplify_str_to_str(input: S) -> BnString { + let name = input.into_bytes_with_nul(); + unsafe { BnString::from_raw(BNRustSimplifyStrToStr(name.as_ref().as_ptr() as *mut _)) } +} + +pub fn simplify_str_to_fqn(input: S, simplify: bool) -> QualifiedName { + let name = input.into_bytes_with_nul(); + unsafe { QualifiedName(BNRustSimplifyStrToFQN(name.as_ref().as_ptr() as *mut _, simplify)) } +} -- cgit v1.3.1