1
2 import envi.cli as e_cli
3 import envi.archs.arm.thumb as e_thumb
4
6 '''
7 Disassemble thumb instructions from the given address.
8
9 Usage: thumb <addr_exp>
10 '''
11 t = db.getTrace()
12
13 d = e_thumb.ArmThumbDisasm()
14
15 argv = e_cli.splitargs(line)
16 size = 20
17 argc = len(argv)
18 if argc == 0:
19 addr = t.getProgramCounter()
20 else:
21 addr = t.parseExpression(argv[0])
22
23 if argc > 1:
24 size = t.parseExpression(argv[1])
25
26 bytes = t.readMemory(addr, size)
27 offset = 0
28
29 db.vprint("Dissassembly:")
30 while offset < size:
31 va = addr + offset
32 op = d.disasm(bytes, offset, va)
33 obytes = bytes[offset:offset+len(op)]
34
35
36 db.canvas.addVaText('0x%.8x' % va, va=va)
37 db.canvas.addText(": %s " % obytes.encode('hex').ljust(17))
38 op.render(db.canvas)
39 db.canvas.addText("\n")
40
41 offset += len(op)
42
44 db.config.set('Aliases','db','mem -F bytes')
45 db.config.set('Aliases','dw','mem -F u_int_16')
46 db.config.set('Aliases','dd','mem -F u_int_32')
47 db.config.set('Aliases','dq','mem -F u_int_64')
48 db.config.set('Aliases','dr','mem -F "Deref View"')
49 db.config.set('Aliases','ds','mem -F "Symbols View"')
50 db.registerCmdExtension(thumb)
51