about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorserpilliere <devnull@localhost>2013-01-10 12:51:11 +0100
committerserpilliere <devnull@localhost>2013-01-10 12:51:11 +0100
commit46604bef980e07af45f6fd6a4c2cd2dd48c64569 (patch)
treee3a6183091386bf0ddab1d49522e950165627d5e
parentddddebe228d24e3bae3fa5fcfd63e6c6ef9497e0 (diff)
downloadmiasm-46604bef980e07af45f6fd6a4c2cd2dd48c64569.tar.gz
miasm-46604bef980e07af45f6fd6a4c2cd2dd48c64569.zip
pe_helper: fix export; mod canon; to_c_helper: add resource parser opt
Diffstat (limited to '')
-rwxr-xr-xexample/disas_and_graph.py2
-rw-r--r--miasm/tools/pe_helper.py18
-rw-r--r--miasm/tools/to_c_helper.py6
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()