view 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
line wrap: on
line source

from paraspace.dexfile import DEXFile
from paraspace.dalvik_opcodes import decode_insn_blk, format_inst


def dump_code_item(item, dex):
    print 'registersSize: %d' % (item.registersSize)
    print 'insSize: %d' % (item.insSize)
    print 'outsSize: %d' % (item.outsSize)
    print 'triesSize: %d' % (item.triesSize)
    print 'debugInfoOff: 0x%x' % (item.debugInfoOff)
    print 'insnsSize: %d' % (item.insnsSize)
    block = item.insns.data
    op_vectors = decode_insn_blk(block)
    for op_vector in op_vectors:
        op_str = format_inst(op_vector)
        print '\t%s' % (op_str)
        pass
    pass


def dump_code_items_filename(fn):
    dex = DEXFile.open(fn)
    items = dex.codeItems.items
    for item in items:
        dump_code_item(item, dex)
        pass
    pass


if __name__ == '__main__':
    import sys
    
    if len(sys.argv) != 2:
        print >> sys.stderr, 'Usage: %s <dex file>' % (sys.argv[0])
        sys.exit(1)
        pass
    
    fn = sys.argv[1]
    dump_code_items_filename(fn)
    pass