view paraspace/dump_code.py @ 134:3dee4d929e1f

Wrap _DEX_TypeList to _DEX_TypeList_align before append to list. - Fix the issue described by map_verify_error_test(). - When inject a _DEX_ClassDef, dexfile_insert_classdefs_relative() should also inject related _DEX_TypeList. - But, dex_append_obj_list() does not known that _DEX_TypeList should be wrapped to to _DEX_TypeList_align and appended to DEXFile.typeLists. We add a special case in dex_append_obj_list() to wrap _DEX_TypeList before trying to insert to a list.
author Thinker K.F. Li <thinker@codemud.net>
date Tue, 09 Aug 2011 17:23:01 +0800
parents 8a53e6f7f517
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