Skip to content

Commit

Permalink
Update IDB import to idb-rs 0.1.9
Browse files Browse the repository at this point in the history
  • Loading branch information
rbran authored and emesare committed Feb 1, 2025
1 parent 286d265 commit 48cec42
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 14 deletions.
4 changes: 2 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions plugins/idb_import/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
idb-rs = { git = "https://github.com/Vector35/idb-rs", tag = "0.1.9" }
log = "0.4"
23 changes: 13 additions & 10 deletions plugins/idb_import/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -219,8 +219,8 @@ impl<F: Fn(usize, usize) -> 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;
Expand All @@ -242,7 +242,8 @@ impl<F: Fn(usize, usize) -> 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}"));
Expand Down Expand Up @@ -443,11 +444,11 @@ impl<F: Fn(usize, usize) -> 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));
Expand All @@ -464,7 +465,8 @@ impl<F: Fn(usize, usize) -> 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}"));
Expand All @@ -484,12 +486,13 @@ impl<F: Fn(usize, usize) -> Result<(), ()>> TranslateIDBTypes<'_, F> {

fn translate_enum(&self, ty_enum: &TILEnum) -> Ref<Type> {
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(),
Expand Down

0 comments on commit 48cec42

Please sign in to comment.