From 0ccbd5f5fe3e646ac18ea013bb443a2b5b29b609 Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Thu, 20 Oct 2016 18:28:43 -0400 Subject: Add associated arch API to Python --- python/__init__.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'python') diff --git a/python/__init__.py b/python/__init__.py index 70267678..63916b1f 100644 --- a/python/__init__.py +++ b/python/__init__.py @@ -6011,6 +6011,8 @@ class Architecture(object): self._cb.getDefaultIntegerSize = self._cb.getDefaultIntegerSize.__class__(self._get_default_integer_size) self._cb.getMaxInstructionLength = self._cb.getMaxInstructionLength.__class__(self._get_max_instruction_length) self._cb.getOpcodeDisplayLength = self._cb.getOpcodeDisplayLength.__class__(self._get_opcode_display_length) + self._cb.getAssociatedArchitectureByAddress = self._cb.getAssociatedArchitectureByAddress.__class__( + self._get_associated_arch_by_address) self._cb.getInstructionInfo = self._cb.getInstructionInfo.__class__(self._get_instruction_info) self._cb.getInstructionText = self._cb.getInstructionText.__class__(self._get_instruction_text) self._cb.freeInstructionText = self._cb.freeInstructionText.__class__(self._free_instruction_text) @@ -6200,6 +6202,15 @@ class Architecture(object): log_error(traceback.format_exc()) return 8 + def _get_associated_arch_by_address(self, ctxt, addr): + try: + result, new_addr = self.perform_get_associated_arch_by_address(addr[0]) + addr[0] = new_addr + return ctypes.cast(result.handle, ctypes.c_void_p).value + except: + log_error(traceback.format_exc()) + return ctypes.cast(self.handle, ctypes.c_void_p).value + def _get_instruction_info(self, ctxt, data, addr, max_len, result): try: buf = ctypes.create_string_buffer(max_len) @@ -6609,6 +6620,9 @@ class Architecture(object): log_error(traceback.format_exc()) return False + def perform_get_associated_arch_by_address(self, addr): + return self, addr + @abc.abstractmethod def perform_get_instruction_info(self, data, addr): """ @@ -6859,6 +6873,12 @@ class Architecture(object): """ return None + def get_associated_arch_by_address(self, addr): + new_addr = ctypes.c_ulonglong() + new_addr.value = addr + result = core.BNGetAssociatedArchitectureByAddress(self.handle, new_addr) + return Architecture(handle = result), new_addr.value + def get_instruction_info(self, data, addr): """ ``get_instruction_info`` returns an InstructionInfo object for the instruction at the given virtual address -- cgit v1.3.1 From 5cfb38e1c3178195935b969201dd7e42419ea671 Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Mon, 24 Oct 2016 18:40:20 -0400 Subject: Add related platform API to Python --- python/__init__.py | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'python') diff --git a/python/__init__.py b/python/__init__.py index 63916b1f..6db17545 100644 --- a/python/__init__.py +++ b/python/__init__.py @@ -9713,6 +9713,15 @@ class Platform(object): """ core.BNRegisterPlatformCallingConvention(self.handle, cc.handle) + def get_related_platform(self, arch): + result = core.BNGetRelatedPlatform(self.handle, arch.handle) + if not result: + return None + return Platform(None, handle = result) + + def add_related_platform(self, arch, platform): + core.BNAddRelatedPlatform(self.handle, arch.handle, platform.handle) + class ScriptingOutputListener(object): def _register(self, handle): self._cb = core.BNScriptingOutputListener() -- cgit v1.3.1 From 6b307f7cad00e4d89e5ed66b9d67e374078f8b95 Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Mon, 24 Oct 2016 19:00:23 -0400 Subject: Add platform property to function --- python/__init__.py | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'python') diff --git a/python/__init__.py b/python/__init__.py index 6db17545..8176b8e6 100644 --- a/python/__init__.py +++ b/python/__init__.py @@ -4788,6 +4788,14 @@ class Function(object): return None return Architecture(arch) + @property + def platform(self): + """Function platform (read-only)""" + platform = core.BNGetFunctionPlatform(self.handle) + if platform is None: + return None + return Platform(None, handle = platform) + @property def start(self): """Function start (read-only)""" -- cgit v1.3.1