Trees | Indices | Help |
---|
|
1 #import sys 2 #import struct 3 #import traceback 4 5 import envi 6 #import envi.bits as e_bits 7 #from envi.bits import binary 8 9 from envi.archs.arm.const import * 10 from envi.archs.arm.armdisasm import ArmStdDisasm 11 from envi.archs.arm.thumbdisasm import ArmThumbDisasm 12 from envi.archs.arm.regs import * 13 14 # Universal opcode things: 15 # len 16 # mode 17 18 #FIXME: TODO 19 # FIXME ldm sp, { pc } seems to not get marked NOFALL 20 # FIXME ldm sp, { pc } should probably be marked IF_RET too... 21 # FIXME b lr / bx lr should be marked IF_RET as well! 22 # FIXME encoding for swi instruction ( <4 cond> 1111 <24 bytes immediate> ) is totally horked (it's in p_uncond) 23 # FIXME some arm opcode values are ENC << and some are ENC and some are etc.. 24 # (make all be ENC_FOO << 16 + <their index> 25 26 # FIXME the following things dont decode correctly 27 # 5346544e cmppl r6, #1308622848 28 29 # 30 # Possible future extensions: 31 # * VectorPointFloat subsystem (coproc 10+11) 32 # * Debug subsystem (coproc 14) 33 # * other 'default' coprocs we can handle and add value? 34 35 36 #################################################################### 37 # Parsers for the multiply family of instruction encodings 384067 7142 self.jzl_enabled = False 43 self._dis_regctx = ArmRegisterContext() 44 self._disasm = None 45 self._disasms = ( 46 ArmStdDisasm(), 47 ArmThumbDisasm(), 48 ArmJazDisasm(), 49 ) 50 self.loclookup = {} 51 52 self.setMode(MODE_ARM)53 5658 59 # hack to make sure parsing odd addresses kicks to thumb 60 if va & 1 == 1: 61 self.setMode( MODE_THUMB ) 62 else: 63 self.setMode( MODE_ARM ) 64 65 op = self._disasm.disasm(bytes, offset, va, trackMode) 66 return op
Trees | Indices | Help |
---|
Generated by Epydoc 3.0.1 on Fri Nov 16 18:22:16 2012 | http://epydoc.sourceforge.net |