From bbf4d616ebdec77538832c1353b8e200a1ad9bbf Mon Sep 17 00:00:00 2001 From: Peter LaFosse Date: Mon, 29 Nov 2021 09:23:53 -0500 Subject: Better handling of symbols whose raw names are obfuscated --- python/types.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'python/types.py') diff --git a/python/types.py b/python/types.py index 4dbd9174..40a49ba8 100644 --- a/python/types.py +++ b/python/types.py @@ -218,7 +218,10 @@ class CoreSymbol: core.BNFreeSymbol(self._handle) def __repr__(self): - return f"<{self.type.name}: \"{self.full_name}\" @ {self.address:#x}>" + try: + return f"<{self.type.name}: \"{self.full_name}\" @ {self.address:#x}>" + except UnicodeDecodeError: + return f"<{self.type.name}: \"{self.raw_bytes}\" @ {self.address:#x}>" def __eq__(self, other): if not isinstance(other, self.__class__): @@ -271,6 +274,17 @@ class CoreSymbol: """Symbol raw name (read-only)""" return core.BNGetSymbolRawName(self._handle) + @property + def raw_bytes(self) -> bytes: + """Bytes of the raw symbol (read-only)""" + count = ctypes.c_ulonglong() + result = core.BNGetSymbolRawBytes(self._handle, count) + assert result is not None, "core.BNGetSymbolRawBytes returned None" + buf = ctypes.create_string_buffer(count.value) + ctypes.memmove(buf, result, count.value) + core.BNFreeSymbolRawBytes(result) + return buf.raw + @property def address(self) -> int: """Symbol address (read-only)""" -- cgit v1.3.1