summaryrefslogtreecommitdiff
path: root/python/types.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/types.py')
-rw-r--r--python/types.py16
1 files changed, 15 insertions, 1 deletions
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__):
@@ -272,6 +275,17 @@ class CoreSymbol:
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)"""
return core.BNGetSymbolAddress(self._handle)