From 171fca05b493735acba234126e49c4784571849c Mon Sep 17 00:00:00 2001 From: mahaloz Date: Thu, 29 Aug 2024 14:37:56 -0700 Subject: [PATCH] Fix a bad BADADDR reference (thanks @Cl4sm) --- libbs/__init__.py | 2 +- libbs/decompilers/ida/compat.py | 16 +++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/libbs/__init__.py b/libbs/__init__.py index 5b56494..6f08b21 100644 --- a/libbs/__init__.py +++ b/libbs/__init__.py @@ -1,4 +1,4 @@ -__version__ = "1.19.1" +__version__ = "1.19.2" import logging diff --git a/libbs/decompilers/ida/compat.py b/libbs/decompilers/ida/compat.py index 037e91f..98ddbd0 100644 --- a/libbs/decompilers/ida/compat.py +++ b/libbs/decompilers/ida/compat.py @@ -836,7 +836,7 @@ def structs(): @execute_write def struct(name): sid = ida_struct.get_struc_id(name) - if sid == 0xffffffffffffffff: + if sid == idaapi.BADADDR: return None sptr = ida_struct.get_struc(sid) @@ -855,7 +855,7 @@ def struct(name): @execute_write def del_ida_struct(name) -> bool: sid = ida_struct.get_struc_id(name) - if sid == 0xffffffffffffffff: + if sid == idaapi.BADADDR: return False sptr = ida_struct.get_struc(sid) @@ -869,7 +869,7 @@ def set_struct_member_name(ida_struct, frame, offset, name): def set_ida_struct(struct: Struct) -> bool: # first, delete any struct by the same name if it exists sid = ida_struct.get_struc_id(struct.name) - if sid != 0xffffffffffffffff: + if sid != idaapi.BADADDR: sptr = ida_struct.get_struc(sid) ida_struct.del_struc(sptr) @@ -997,14 +997,20 @@ def get_enum_members(_enum) -> typing.Dict[str, int]: enum_members[member_name] = member member = ida_enum.get_next_enum_member(_enum, member, 0) - while member: - if member == 0xffffffffffffffff: break + max_iters = 100 + for _ in range(max_iters): + if member == idaapi.BADADDR: + break + member_addr = ida_enum.get_enum_member(_enum, member, 0, 0) member_name = ida_enum.get_enum_member_name(member_addr) if member_name: enum_members[member_name] = member member = ida_enum.get_next_enum_member(_enum, member, 0) + else: + _l.critical(f"IDA failed to iterate all enum members for enum %s", _enum) + return enum_members