diff options
| author | Rusty Wagner <rusty@vector35.com> | 2016-07-15 21:15:37 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty@vector35.com> | 2016-07-15 21:15:37 -0400 |
| commit | 2c2f521aa188d4f8027c5db8dfaf88f670d8a63f (patch) | |
| tree | f736704102bc0f1f779a7ab34714baf465a66042 /python/__init__.py | |
| parent | 8fcc840c79174728ef96afa0ff37713e74311d51 (diff) | |
Add API for instruction length and option for showing opcodes in disassembly
Diffstat (limited to 'python/__init__.py')
| -rw-r--r-- | python/__init__.py | 20 |
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) |
