diff options
| author | plafosse <peter@vector35.com> | 2016-10-28 20:41:40 -0400 |
|---|---|---|
| committer | plafosse <peter@vector35.com> | 2016-10-28 20:41:40 -0400 |
| commit | 18e7e9378a4d7dff8140ed35eb47ce7993bd850b (patch) | |
| tree | c78882aa02a668637fb33124ae20f34a25e461f1 /python | |
| parent | 5e4cca1f1796bec109adacdb049d9e34c17656eb (diff) | |
| parent | b5eacc14097def2367b650fc4a9377d4910441eb (diff) | |
Merging with dev
Diffstat (limited to 'python')
| -rw-r--r-- | python/architecture.py | 14 | ||||
| -rw-r--r-- | python/examples/angr_plugin.py | 21 | ||||
| -rw-r--r-- | python/examples/bin_info.py | 16 | ||||
| -rw-r--r-- | python/examples/breakpoint.py | 20 | ||||
| -rw-r--r-- | python/function.py | 8 |
5 files changed, 71 insertions, 8 deletions
diff --git a/python/architecture.py b/python/architecture.py index 11aa4757..a8aa391b 100644 --- a/python/architecture.py +++ b/python/architecture.py @@ -222,6 +222,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) @@ -411,6 +413,15 @@ class Architecture(object): log.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.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) @@ -820,6 +831,9 @@ class Architecture(object): log.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): """ diff --git a/python/examples/angr_plugin.py b/python/examples/angr_plugin.py index 675cc5f6..852eff65 100644 --- a/python/examples/angr_plugin.py +++ b/python/examples/angr_plugin.py @@ -1,3 +1,24 @@ +# Copyright (c) 2015-2016 Vector 35 LLC +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + + # This plugin assumes angr is already installed and available on the system. See the angr documentation # for information about installing angr. It should be installed using the virtualenv method. # diff --git a/python/examples/bin_info.py b/python/examples/bin_info.py index ab963e4e..a472495a 100644 --- a/python/examples/bin_info.py +++ b/python/examples/bin_info.py @@ -37,20 +37,20 @@ else: bv = binaryninja.BinaryViewType[bintype].open(target) bv.update_analysis_and_wait() -print("-------- %s --------" % target) -print("START: 0x%x" % bv.start) -print("ENTRY: 0x%x" % bv.entry_point) -print("ARCH: %s" % bv.arch.name) -print("\n-------- Function List --------") +log.log_info("-------- %s --------" % target) +log.log_info("START: 0x%x" % bv.start) +log.log_info("ENTRY: 0x%x" % bv.entry_point) +log.log_info("ARCH: %s" % bv.arch.name) +log.log_info("\n-------- Function List --------") for func in bv.functions: - print(func.symbol.name) + log.log_info(func.symbol.name) -print("\n-------- First 10 strings --------") +log.log_info("\n-------- First 10 strings --------") for i in xrange(10): start = bv.strings[i].start length = bv.strings[i].length string = bv.read(start, length) - print("0x%x (%d):\t%s" % (start, length, string)) + log.log_info("0x%x (%d):\t%s" % (start, length, string)) diff --git a/python/examples/breakpoint.py b/python/examples/breakpoint.py index 44df19e2..2426e6a1 100644 --- a/python/examples/breakpoint.py +++ b/python/examples/breakpoint.py @@ -1,3 +1,23 @@ +# Copyright (c) 2015-2016 Vector 35 LLC +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + from binaryninja import * def write_breakpoint(view, start, length): diff --git a/python/function.py b/python/function.py index 37364840..2910d283 100644 --- a/python/function.py +++ b/python/function.py @@ -212,6 +212,14 @@ class Function(object): return architecture.Architecture(arch) @property + def platform(self): + """Function platform (read-only)""" + platform = core.BNGetFunctionPlatform(self.handle) + if platform is None: + return None + return platform.Platform(None, handle = platform) + + @property def start(self): """Function start (read-only)""" return core.BNGetFunctionStart(self.handle) |
