diff options
| author | serpilliere <devnull@localhost> | 2013-01-10 12:51:11 +0100 |
|---|---|---|
| committer | serpilliere <devnull@localhost> | 2013-01-10 12:51:11 +0100 |
| commit | 46604bef980e07af45f6fd6a4c2cd2dd48c64569 (patch) | |
| tree | e3a6183091386bf0ddab1d49522e950165627d5e | |
| parent | ddddebe228d24e3bae3fa5fcfd63e6c6ef9497e0 (diff) | |
| download | miasm-46604bef980e07af45f6fd6a4c2cd2dd48c64569.tar.gz miasm-46604bef980e07af45f6fd6a4c2cd2dd48c64569.zip | |
pe_helper: fix export; mod canon; to_c_helper: add resource parser opt
Diffstat (limited to '')
| -rwxr-xr-x | example/disas_and_graph.py | 2 | ||||
| -rw-r--r-- | miasm/tools/pe_helper.py | 18 | ||||
| -rw-r--r-- | miasm/tools/to_c_helper.py | 6 |
3 files changed, 20 insertions, 6 deletions
diff --git a/example/disas_and_graph.py b/example/disas_and_graph.py index 124b8f4a..0a6a3e5d 100755 --- a/example/disas_and_graph.py +++ b/example/disas_and_graph.py @@ -121,7 +121,7 @@ elif data.startswith("\xca\xfe\xba\xbe"): else: - print 'WARNING cannot autodetect file type, using raw' + print 'WARNING cannot autodetect file type, using raw', repr(data[:10]) in_str = bin_stream.bin_stream(data) if ad_to_dis == None: ad_to_dis = 0 diff --git a/miasm/tools/pe_helper.py b/miasm/tools/pe_helper.py index f8955eb1..1ef29103 100644 --- a/miasm/tools/pe_helper.py +++ b/miasm/tools/pe_helper.py @@ -64,13 +64,13 @@ def func_from_import(pe_name, func): if type(func) is str: for i, n in enumerate(e.DirExport.f_names): if n.name.name == func: - found = e.DirExport.f_address[e.DirExport.f_nameordinals[i].ordinal] + found = e.DirExport.f_address[e.DirExport.f_nameordinals[i].ordinal].rva break elif type(func) in [int, long]: for i, n in enumerate(e.DirExport.f_names): if e.DirExport.f_nameordinals[i].ordinal+e.DirExport.expdesc.base == func: - found = e.DirExport.f_address[e.DirExport.f_nameordinals[i].ordinal] + found = e.DirExport.f_address[e.DirExport.f_nameordinals[i].ordinal].rva break else: raise ValueError('unknown fund type', func) @@ -388,8 +388,10 @@ def is_redirected_export(e, ad): def canon_libname_libfunc(libname, libfunc): dn = libname.split('.')[0] - fn = "%s"%libfunc - return "%s_%s"%(dn, fn) + if type(libfunc) == str: + return "%s_%s"%(dn, libfunc) + else: + return str(dn), libfunc class libimp: def __init__(self, lib_base_ad = 0x77700000): @@ -661,10 +663,18 @@ def preload_elf(e, patch_vm_imp = True, lib_base_ad = 0x77700000): def get_export_name_addr_list(e): out = [] + # add func name for i, n in enumerate(e.DirExport.f_names): addr = e.DirExport.f_address[e.DirExport.f_nameordinals[i].ordinal] f_name = n.name.name + #print f_name, hex(e.rva2virt(addr.rva)) out.append((f_name, e.rva2virt(addr.rva))) + + # add func ordinal + for i, o in enumerate(e.DirExport.f_nameordinals): + addr = e.DirExport.f_address[o.ordinal] + #print o.ordinal, e.DirExport.expdesc.base, hex(e.rva2virt(addr.rva)) + out.append((o.ordinal+e.DirExport.expdesc.base, e.rva2virt(addr.rva))) return out diff --git a/miasm/tools/to_c_helper.py b/miasm/tools/to_c_helper.py index 38f21272..84f8df22 100644 --- a/miasm/tools/to_c_helper.py +++ b/miasm/tools/to_c_helper.py @@ -1163,7 +1163,11 @@ def load_pe_in_vm(fname_in, options, all_imp_dll = None, **kargs): from miasm.tools import pe_helper from miasm.tools import codenat - e = pe_init.PE(open(fname_in, 'rb').read()) + parse_resources = True + if 'parse_resources' in kargs: + parse_resources = kargs['parse_resources'] + e = pe_init.PE(open(fname_in, 'rb').read(), + parse_resources = parse_resources) vm_init_regs() init_memory_page_pool_py() |