summaryrefslogtreecommitdiff
path: root/python/__init__.py
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2016-07-15 21:15:37 -0400
committerRusty Wagner <rusty@vector35.com>2016-07-15 21:15:37 -0400
commit2c2f521aa188d4f8027c5db8dfaf88f670d8a63f (patch)
treef736704102bc0f1f779a7ab34714baf465a66042 /python/__init__.py
parent8fcc840c79174728ef96afa0ff37713e74311d51 (diff)
Add API for instruction length and option for showing opcodes in disassembly
Diffstat (limited to 'python/__init__.py')
-rw-r--r--python/__init__.py20
1 files changed, 20 insertions, 0 deletions
diff --git a/python/__init__.py b/python/__init__.py
index f2be8758..fb5bfa3c 100644
--- a/python/__init__.py
+++ b/python/__init__.py
@@ -3261,6 +3261,8 @@ class Architecture(object):
endianness = core.LittleEndian
address_size = 8
default_int_size = 4
+ max_instr_length = 16
+ opcode_display_length = 8
regs = {}
stack_pointer = None
link_reg = None
@@ -3278,6 +3280,8 @@ class Architecture(object):
self.__dict__["endianness"] = core.BNEndianness_names[core.BNGetArchitectureEndianness(self.handle)]
self.__dict__["address_size"] = core.BNGetArchitectureAddressSize(self.handle)
self.__dict__["default_int_size"] = core.BNGetArchitectureDefaultIntegerSize(self.handle)
+ self.__dict__["max_instr_length"] = core.BNGetArchitectureMaxInstructionLength(self.handle)
+ self.__dict__["opcode_display_length"] = core.BNGetArchitectureOpcodeDisplayLength(self.handle)
self.__dict__["stack_pointer"] = core.BNGetArchitectureRegisterName(self.handle,
core.BNGetArchitectureStackPointerRegister(self.handle))
self.__dict__["link_reg"] = core.BNGetArchitectureRegisterName(self.handle,
@@ -3361,6 +3365,8 @@ class Architecture(object):
self._cb.getEndianness = self._cb.getEndianness.__class__(self._get_endianness)
self._cb.getAddressSize = self._cb.getAddressSize.__class__(self._get_address_size)
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.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)
@@ -3536,6 +3542,20 @@ class Architecture(object):
log_error(traceback.format_exc())
return 4
+ def _get_max_instruction_length(self, ctxt):
+ try:
+ return self.__class__.max_instr_length
+ except:
+ log_error(traceback.format_exc())
+ return 16
+
+ def _get_opcode_display_length(self, ctxt):
+ try:
+ return self.__class__.opcode_display_length
+ except:
+ log_error(traceback.format_exc())
+ return 8
+
def _get_instruction_info(self, ctxt, data, addr, max_len, result):
try:
buf = ctypes.create_string_buffer(max_len)