Mercurial > paraspace
diff examples/inject_redir.py @ 131:044bfc415577
Fix issue of data map verification.
- Dalvik complain that data map generated by inject_redir.py is unexpected.
- Test case map_verify_error_test()
- Refactor inject_redir.py to paraspace.injection.inject_redir().
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Tue, 09 Aug 2011 11:47:43 +0800 |
parents | b381aa95fbad |
children |
line wrap: on
line diff
--- a/examples/inject_redir.py Tue Aug 09 00:07:04 2011 +0800 +++ b/examples/inject_redir.py Tue Aug 09 11:47:43 2011 +0800 @@ -7,10 +7,7 @@ # from paraspace.dexfile import DEXFile, DEXFile_linked from paraspace.dex_deptracker import prepare_dep_decls -from paraspace.dex_deptracker import restore_dependencies -from paraspace.dex_deptracker import dex_sort_sorted_arrays -from paraspace.injection import inject_classdefs, make_methodidxs_redir_map -from paraspace.injection import dexfile_redirect_types +from paraspace.injection import inject_redir import sys if len(sys.argv) != 6: @@ -21,42 +18,28 @@ sys.exit(1) pass -src_dexname = sys.argv[1] -inj_classname = sys.argv[2] -dst_dexname = sys.argv[3] -redir_classname = sys.argv[4] -output_name = sys.argv[5] -decls = prepare_dep_decls() - -src_dex = DEXFile.open(src_dexname) -src_linked = DEXFile_linked.build_dependencies(src_dex, decls) - -dst_dex = DEXFile.open(dst_dexname) -dst_linked = DEXFile_linked.build_dependencies(dst_dex, decls) - -inj_classdef = src_linked.find_class_name(inj_classname) -injected_classdefs = inject_classdefs(dst_linked, src_linked, [inj_classdef]) - -redir_typeid = dst_linked.find_typeid_name(redir_classname) -redir_typeidx = dst_linked.get_idx_typeid(redir_typeid) -inj_typeid = dst_linked.find_typeid_name(inj_classname) -inj_typeidx = dst_linked.get_idx_typeid(inj_typeid) -typeidxs_redir = {redir_typeidx: inj_typeidx} - -methodidxs_redir = \ - make_methodidxs_redir_map(dst_linked, dst_linked, typeidxs_redir) - -injected_typeidxs = [dst_linked.get_idx_classdef(classdef) - for classdef in injected_classdefs] -dexfile_redirect_types(dst_linked, typeidxs_redir, methodidxs_redir, - excludes=injected_typeidxs) - -dex_sort_sorted_arrays(dst_linked) -restore_dependencies(dst_linked, decls) - -restore_raw = dst_linked.to_str() - -ofile = open(output_name, 'w') -ofile.write(restore_raw) -ofile.close() +if __name__ == '__main__': + src_dexname = sys.argv[1] + inj_classname = sys.argv[2] + dst_dexname = sys.argv[3] + redir_classname = sys.argv[4] + output_name = sys.argv[5] + + decls = prepare_dep_decls() + + src_dex = DEXFile.open(src_dexname) + src_linked = DEXFile_linked.build_dependencies(src_dex, decls) + + dst_dex = DEXFile.open(dst_dexname) + dst_linked = DEXFile_linked.build_dependencies(dst_dex, decls) + + inject_redir(src_linked, inj_classname, + dst_linked, redir_classname, decls) + + restore_raw = dst_linked.to_str() + + ofile = open(output_name, 'w') + ofile.write(restore_raw) + ofile.close() + pass