From c9b43e1825977c3e6f32fc32938a963c3b3a5b17 Mon Sep 17 00:00:00 2001 From: Josh Ferrell Date: Wed, 24 Dec 2025 16:45:43 -0500 Subject: [Rust API] Add BinaryViewExt.address_comments --- rust/src/binary_view.rs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'rust/src/binary_view.rs') diff --git a/rust/src/binary_view.rs b/rust/src/binary_view.rs index 459253b9..1952c780 100644 --- a/rust/src/binary_view.rs +++ b/rust/src/binary_view.rs @@ -62,7 +62,7 @@ use crate::types::{ use crate::variable::DataVariable; use crate::workflow::Workflow; use crate::{Endianness, BN_FULL_CONFIDENCE}; -use std::collections::HashMap; +use std::collections::{BTreeMap, HashMap}; use std::ffi::{c_char, c_void, CString}; use std::fmt::{Display, Formatter}; use std::ops::Range; @@ -1686,6 +1686,24 @@ pub trait BinaryViewExt: BinaryViewBase { unsafe { BNRemoveUserDataTag(self.as_ref().handle, addr, tag.handle) } } + fn address_comments(&self) -> BTreeMap { + let mut comment_count = 0; + let mut result = BTreeMap::new(); + let addresses; + unsafe { + let addresses_raw = + BNGetGlobalCommentedAddresses(self.as_ref().handle, &mut comment_count); + addresses = std::slice::from_raw_parts(addresses_raw, comment_count); + } + + for address in addresses { + if let Some(comment) = self.comment_at(*address) { + result.insert(*address, comment); + } + } + result + } + fn comment_at(&self, addr: u64) -> Option { unsafe { let comment_raw = BNGetGlobalCommentForAddress(self.as_ref().handle, addr); -- cgit v1.3.1