From b14cdec968445e1502ead497b00f49d5bb68c92a Mon Sep 17 00:00:00 2001 From: KyleMiles Date: Tue, 18 Apr 2023 12:38:34 -0400 Subject: Rust API : Misc Changes and Improvements --- rust/src/binaryview.rs | 30 ++++++++++++++++++++++++++++++ rust/src/debuginfo.rs | 2 +- rust/src/lib.rs | 5 ++++- rust/src/types.rs | 10 +++++++++- 4 files changed, 44 insertions(+), 3 deletions(-) (limited to 'rust/src') diff --git a/rust/src/binaryview.rs b/rust/src/binaryview.rs index b6ff3931..9e56f855 100644 --- a/rust/src/binaryview.rs +++ b/rust/src/binaryview.rs @@ -164,6 +164,24 @@ pub trait BinaryViewExt: BinaryViewBase { unsafe { Ok(BinaryView::from_raw(handle)) } } + fn raw_view(&self) -> Result> { + let raw = "Raw".into_bytes_with_nul(); + + let handle = + unsafe { BNGetFileViewOfType(self.file().as_ref().handle, raw.as_ptr() as *mut _) }; + + if handle.is_null() { + return Err(()); + } + + unsafe { Ok(BinaryView::from_raw(handle)) } + } + + fn view_type(&self) -> BnString { + let ptr: *mut c_char = unsafe { BNGetViewType(self.as_ref().handle) }; + unsafe { BnString::from_raw(ptr) } + } + /// Reads up to `len` bytes from address `offset` fn read_vec(&self, offset: u64, len: usize) -> Vec { let mut ret = Vec::with_capacity(len); @@ -1144,3 +1162,15 @@ impl ToOwned for BinaryView { unsafe impl Send for BinaryView {} unsafe impl Sync for BinaryView {} + +impl std::fmt::Debug for BinaryView { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "BinaryView (type: `{}`): '{}', len {:#x}", + self.view_type(), + self.file().filename(), + self.len() + ) + } +} diff --git a/rust/src/debuginfo.rs b/rust/src/debuginfo.rs index fb108a21..0fd1930e 100644 --- a/rust/src/debuginfo.rs +++ b/rust/src/debuginfo.rs @@ -797,7 +797,7 @@ impl DebugInfo { unsafe { BNAddDebugDataVariableInfo( self.handle, - &mut BNDataVariableAndName { + &BNDataVariableAndName { address: var.address, type_: var.t.contents.handle, name: name.as_ref().as_ptr() as *mut _, diff --git a/rust/src/lib.rs b/rust/src/lib.rs index 57b71cba..61016c0f 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -238,7 +238,10 @@ pub fn open_view>(filename: F) -> Result Some(view), + _ => None, + } } }); diff --git a/rust/src/types.rs b/rust/src/types.rs index 11934ceb..00c274b7 100644 --- a/rust/src/types.rs +++ b/rust/src/types.rs @@ -1853,7 +1853,15 @@ impl NamedTypeReference { Self { handle } } - pub fn new( + /// Most people should use this: The core "should" figure out the type ID for you + /// TODO : Check with Peter about what a better description would be + pub fn new(type_class: NamedTypeReferenceClass, mut name: QualifiedName) -> Self { + Self { + handle: unsafe { BNCreateNamedType(type_class, "".as_ptr() as _, &mut name.0) }, + } + } + + pub fn new_with_id( type_class: NamedTypeReferenceClass, type_id: S, mut name: QualifiedName, -- cgit v1.3.1