Skip to content

Commit c465d44

Browse files
committed
Fix demangler API consumer builds
1 parent 566170e commit c465d44

9 files changed

Lines changed: 28 additions & 34 deletions

File tree

plugins/idb_import/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ file(GLOB API_SOURCES CONFIGURE_DEPENDS
1212
${PROJECT_SOURCE_DIR}/../../rust/binaryninjacore-sys/Cargo.toml
1313
${PROJECT_SOURCE_DIR}/../../rust/binaryninjacore-sys/src/*
1414
${PROJECT_SOURCE_DIR}/../../rust/Cargo.toml
15+
${PROJECT_SOURCE_DIR}/../../rust/src/*.rs
1516
${PROJECT_SOURCE_DIR}/../../rust/src/*/*.rs)
1617

1718
if(CMAKE_BUILD_TYPE MATCHES Debug)

plugins/pdb-ng/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ file(GLOB API_SOURCES CONFIGURE_DEPENDS
6060
${BN_API_SOURCE_DIR}/rust/binaryninjacore-sys/Cargo.toml
6161
${BN_API_SOURCE_DIR}/rust/binaryninjacore-sys/src/*
6262
${BN_API_SOURCE_DIR}/rust/Cargo.toml
63+
${BN_API_SOURCE_DIR}/rust/src/*.rs
6364
${BN_API_SOURCE_DIR}/rust/src/*/*.rs)
6465

6566
set_property(TARGET ${PROJECT_NAME} PROPERTY OUTPUT_FILE_PATH ${OUTPUT_FILE_PATH})

plugins/pdb-ng/src/symbol_parser.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1818,8 +1818,10 @@ impl<'a, S: Source<'a> + 'a> PDBParserInstance<'a, S> {
18181818
&mut self.settings_query_opts.clone(),
18191819
);
18201820
let (mut t, mut name) = match demangle_ms(&self.arch, raw_name, simplify_templates) {
1821-
Some((name, Some(t))) => (Some(Conf::new(t, DEMANGLE_CONFIDENCE)), name),
1822-
Some((name, _)) => (None, name),
1821+
Some(result) => (
1822+
result.ty.map(|ty| Conf::new(ty, DEMANGLE_CONFIDENCE)),
1823+
result.name,
1824+
),
18231825
_ => (None, QualifiedName::new(vec![raw_name.clone()])),
18241826
};
18251827

plugins/warp/src/convert/symbol.rs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use binaryninja::binary_view::BinaryView;
2+
use binaryninja::demangle::{demangle_any, DemanglerConfig};
23
use binaryninja::rc::Ref as BNRef;
34
use binaryninja::symbol::Symbol as BNSymbol;
45
use binaryninja::symbol::SymbolType as BNSymbolType;
@@ -75,17 +76,13 @@ pub fn to_bn_symbol_at_address(view: &BinaryView, symbol: &Symbol, addr: u64) ->
7576
let raw_name = symbol.name.as_str();
7677
let mut symbol_builder = BNSymbol::builder(symbol_type, &symbol.name, addr);
7778
// Demangle symbol name (short is with simplifications).
78-
if let Some(arch) = view.default_arch() {
79-
if let Some((full_name, _)) =
80-
binaryninja::demangle::demangle_generic(&arch, raw_name, Some(view), false)
81-
{
82-
symbol_builder = symbol_builder.full_name(full_name);
83-
}
84-
if let Some((short_name, _)) =
85-
binaryninja::demangle::demangle_generic(&arch, raw_name, Some(view), false)
86-
{
87-
symbol_builder = symbol_builder.short_name(short_name);
88-
}
79+
let full_config = DemanglerConfig::for_binary_view(view, false);
80+
if let Some(result) = demangle_any(raw_name, &full_config) {
81+
symbol_builder = symbol_builder.full_name(result.name);
82+
}
83+
let short_config = DemanglerConfig::for_binary_view(view, true);
84+
if let Some(result) = demangle_any(raw_name, &short_config) {
85+
symbol_builder = symbol_builder.short_name(result.name);
8986
}
9087
symbol_builder.create()
9188
}

plugins/workflow_objc/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ file(GLOB_RECURSE API_SOURCES CONFIGURE_DEPENDS
8181
${PROJECT_SOURCE_DIR}/../../rust/binaryninjacore-sys/Cargo.toml
8282
${PROJECT_SOURCE_DIR}/../../rust/binaryninjacore-sys/src/*.rs
8383
${PROJECT_SOURCE_DIR}/../../rust/Cargo.toml
84+
${PROJECT_SOURCE_DIR}/../../rust/src/*.rs
8485
${PROJECT_SOURCE_DIR}/../../rust/src/*/*.rs)
8586

8687
find_program(RUSTUP_PATH rustup REQUIRED HINTS ~/.cargo/bin)

plugins/workflow_swift/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ file(GLOB_RECURSE API_SOURCES CONFIGURE_DEPENDS
8181
${PROJECT_SOURCE_DIR}/../../rust/binaryninjacore-sys/Cargo.toml
8282
${PROJECT_SOURCE_DIR}/../../rust/binaryninjacore-sys/src/*.rs
8383
${PROJECT_SOURCE_DIR}/../../rust/Cargo.toml
84+
${PROJECT_SOURCE_DIR}/../../rust/src/*.rs
8485
${PROJECT_SOURCE_DIR}/../../rust/src/*/*.rs)
8586

8687
find_program(RUSTUP_PATH rustup REQUIRED HINTS ~/.cargo/bin)

plugins/workflow_swift/src/demangler/mod.rs

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@ mod function_type;
22
mod name;
33
mod type_reconstruction;
44

5-
use binaryninja::architecture::CoreArchitecture;
65
use binaryninja::binary_view::BinaryView;
7-
use binaryninja::demangle::CustomDemangler;
8-
use binaryninja::rc::Ref;
6+
use binaryninja::demangle::{CustomDemangler, DemanglerConfig, DemanglerResult};
97
use binaryninja::settings::{QueryOptions, Settings};
10-
use binaryninja::types::{QualifiedName, Type};
8+
use binaryninja::types::QualifiedName;
119

1210
fn should_extract_types(view: Option<&BinaryView>) -> bool {
1311
let mut opts = match view {
@@ -32,26 +30,27 @@ impl CustomDemangler for SwiftDemangler {
3230

3331
fn demangle(
3432
&self,
35-
arch: &CoreArchitecture,
3633
name: &str,
37-
view: Option<Ref<BinaryView>>,
38-
_simplify: bool,
39-
) -> Option<(QualifiedName, Option<Ref<Type>>)> {
34+
config: &DemanglerConfig,
35+
) -> Option<DemanglerResult> {
4036
let ctx = swift_demangler::Context::new();
4137
let symbol = swift_demangler::Symbol::parse(&ctx, name)?;
4238

43-
if should_extract_types(view.as_deref()) {
44-
let ty = function_type::build_function_type(&symbol, arch);
39+
if should_extract_types(config.view.as_deref()) {
40+
let ty = config
41+
.platform
42+
.as_ref()
43+
.and_then(|platform| function_type::build_function_type(&symbol, &platform.arch()));
4544
let qname = if ty.is_some() {
4645
name::build_short_name(&symbol)
4746
} else {
4847
None
4948
}
5049
.unwrap_or_else(|| QualifiedName::from(symbol.display()));
51-
Some((qname, ty))
50+
Some(DemanglerResult::new(qname, ty))
5251
} else {
5352
let qname = QualifiedName::from(symbol.display());
54-
Some((qname, None))
53+
Some(DemanglerResult::new(qname, None))
5554
}
5655
}
5756
}

plugins/workflow_swift/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,5 @@ pub extern "C" fn CorePluginInit() -> bool {
3030
}"#,
3131
);
3232

33-
Demangler::register("Swift", SwiftDemangler).is_some()
33+
Demangler::register("Swift", SwiftDemangler)
3434
}

rust/src/rc.rs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -318,14 +318,6 @@ where
318318

319319
#[allow(private_bounds)]
320320
impl<P: CoreArrayProviderInner> ArrayGuard<P> {
321-
pub(crate) unsafe fn new(raw: *mut P::Raw, count: usize, context: P::Context) -> Self {
322-
Self {
323-
contents: raw,
324-
count,
325-
context,
326-
}
327-
}
328-
329321
#[inline]
330322
pub fn len(&self) -> usize {
331323
self.count

0 commit comments

Comments
 (0)