Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading