| 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
38
40
42 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
56
58
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
67
71
| Trees | Indices | Help |
|---|
| Generated by Epydoc 3.0.1 on Fri Nov 16 18:22:16 2012 | http://epydoc.sourceforge.net |