annotate paraspace/dump_code.py @ 103:8a53e6f7f517

Provide convinience API to convert str block into opcode vectors
author Thinker K.F. Li <thinker@codemud.net>
date Wed, 27 Jul 2011 12:09:19 +0800
parents 63de54e61e5b
children
rev   line source
84
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
1 from paraspace.dexfile import DEXFile
103
8a53e6f7f517 Provide convinience API to convert str block into opcode vectors
Thinker K.F. Li <thinker@codemud.net>
parents: 84
diff changeset
2 from paraspace.dalvik_opcodes import decode_insn_blk, format_inst
84
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
3
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
4
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
5 def dump_code_item(item, dex):
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
6 print 'registersSize: %d' % (item.registersSize)
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
7 print 'insSize: %d' % (item.insSize)
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
8 print 'outsSize: %d' % (item.outsSize)
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
9 print 'triesSize: %d' % (item.triesSize)
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
10 print 'debugInfoOff: 0x%x' % (item.debugInfoOff)
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
11 print 'insnsSize: %d' % (item.insnsSize)
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
12 block = item.insns.data
103
8a53e6f7f517 Provide convinience API to convert str block into opcode vectors
Thinker K.F. Li <thinker@codemud.net>
parents: 84
diff changeset
13 op_vectors = decode_insn_blk(block)
84
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
14 for op_vector in op_vectors:
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
15 op_str = format_inst(op_vector)
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
16 print '\t%s' % (op_str)
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
17 pass
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
18 pass
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
19
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
20
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
21 def dump_code_items_filename(fn):
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
22 dex = DEXFile.open(fn)
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
23 items = dex.codeItems.items
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
24 for item in items:
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
25 dump_code_item(item, dex)
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
26 pass
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
27 pass
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
28
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
29
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
30 if __name__ == '__main__':
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
31 import sys
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
32
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
33 if len(sys.argv) != 2:
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
34 print >> sys.stderr, 'Usage: %s <dex file>' % (sys.argv[0])
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
35 sys.exit(1)
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
36 pass
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
37
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
38 fn = sys.argv[1]
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
39 dump_code_items_filename(fn)
63de54e61e5b Add dump_code.py
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
40 pass