From d6fcdb3263b3deb5c972131af1f2b50bcc918bc9 Mon Sep 17 00:00:00 2001 From: rbran Date: Tue, 28 Jan 2025 13:54:11 -0300 Subject: [PATCH] Update IDB import to idb-rs 0.1.9 --- Cargo.lock | 4 ++-- plugins/idb_import/Cargo.toml | 4 ++-- plugins/idb_import/src/types.rs | 23 +++++++++++++---------- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3a30b0ba7d..60704431d0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1449,8 +1449,8 @@ dependencies = [ [[package]] name = "idb-rs" -version = "0.1.8" -source = "git+https://github.com/Vector35/idb-rs?tag=0.1.8#fcbea391c383b333500a89d36a4b87ab7031d9cb" +version = "0.1.9" +source = "git+https://github.com/Vector35/idb-rs?tag=0.1.9#204766075926e7920badc55b16164748ec76fdf5" dependencies = [ "anyhow", "bincode", diff --git a/plugins/idb_import/Cargo.toml b/plugins/idb_import/Cargo.toml index 3b63027f80..1871df6e3c 100644 --- a/plugins/idb_import/Cargo.toml +++ b/plugins/idb_import/Cargo.toml @@ -11,5 +11,5 @@ crate-type = ["cdylib"] anyhow = { version = "1.0.86", features = ["backtrace"] } binaryninja.workspace = true binaryninjacore-sys.workspace = true -idb-rs = { git = "https://github.com/Vector35/idb-rs", tag = "0.1.8" } -log = "0.4" \ No newline at end of file +idb-rs = { git = "https://github.com/Vector35/idb-rs", tag = "0.1.9" } +log = "0.4" diff --git a/plugins/idb_import/src/types.rs b/plugins/idb_import/src/types.rs index 98706429c7..7b4ca67540 100644 --- a/plugins/idb_import/src/types.rs +++ b/plugins/idb_import/src/types.rs @@ -219,8 +219,8 @@ impl Result<(), ()>> TranslateIDBTypes<'_, F> { }; let mut partial_error_args = vec![]; let mut bn_args = Vec::with_capacity(fun.args.len()); - for (i, (arg_name, arg_type, _arg_loc)) in fun.args.iter().enumerate() { - let arg = match self.translate_type(arg_type) { + for (i, fun_arg) in fun.args.iter().enumerate() { + let arg = match self.translate_type(&fun_arg.ty) { TranslateTypeResult::Translated(trans) => trans, TranslateTypeResult::PartiallyTranslated(trans, error) => { is_partial = true; @@ -242,7 +242,8 @@ impl Result<(), ()>> TranslateIDBTypes<'_, F> { }; // TODO create location from `arg_loc`? let loc = None; - let name = arg_name + let name = fun_arg + .name .as_ref() .map(|name| name.as_utf8_lossy().to_string()) .unwrap_or_else(|| format!("arg_{i}")); @@ -443,11 +444,11 @@ impl Result<(), ()>> TranslateIDBTypes<'_, F> { let mut structure = StructureBuilder::new(); structure.structure_type(StructureType::UnionStructureType); let mut errors = vec![]; - for (i, (member_name, member_type)) in ty_union.members.iter().enumerate() { + for (i, member) in ty_union.members.iter().enumerate() { // bitfields can be translated into complete fields - let mem = match &member_type.type_variant { + let mem = match &member.ty.type_variant { TILTypeVariant::Bitfield(field) => field_from_bytes(field.nbytes.get().into()), - _ => match self.translate_type(member_type) { + _ => match self.translate_type(&member.ty) { TranslateTypeResult::Translated(ty) => ty, TranslateTypeResult::Error(error) => { errors.push((i, error)); @@ -464,7 +465,8 @@ impl Result<(), ()>> TranslateIDBTypes<'_, F> { }, }; - let name = member_name + let name = member + .name .as_ref() .map(|name| name.as_utf8_lossy().to_string()) .unwrap_or_else(|| format!("member_{i}")); @@ -484,12 +486,13 @@ impl Result<(), ()>> TranslateIDBTypes<'_, F> { fn translate_enum(&self, ty_enum: &TILEnum) -> Ref { let mut eb = EnumerationBuilder::new(); - for (i, (name, member_value)) in ty_enum.members.iter().enumerate() { - let name = name + for (i, member) in ty_enum.members.iter().enumerate() { + let name = member + .name .as_ref() .map(|name| name.as_utf8_lossy().to_string()) .unwrap_or_else(|| format!("member_{i}")); - eb.insert(name, *member_value); + eb.insert(name, member.value); } Type::enumeration( &eb.finalize(),