about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorVladislav HrĨka <nofiv@users.noreply.github.com>2020-07-14 12:58:06 +0200
committerESET GitHub Admin <github@eset.com>2020-07-14 10:56:58 -0400
commit1d24520ebfe25e5cdc89740ca694e15f36649de9 (patch)
tree1ae7dc1cecf181f5ee44e3ef8e9f8401bbb814c5
parentd9ffe10a32c6a28da5f15f267ed773a48e9e485c (diff)
downloadfocaccia-miasm-1d24520ebfe25e5cdc89740ca694e15f36649de9.tar.gz
focaccia-miasm-1d24520ebfe25e5cdc89740ca694e15f36649de9.zip
Fix bug in lookup for symbolic stubs of library exports via ordinal
-rw-r--r--miasm/analysis/dse.py13
1 files changed, 9 insertions, 4 deletions
diff --git a/miasm/analysis/dse.py b/miasm/analysis/dse.py
index f3af9d18..4d2655df 100644
--- a/miasm/analysis/dse.py
+++ b/miasm/analysis/dse.py
@@ -250,7 +250,7 @@ class DSEEngine(object):
     def add_lib_handler(self, libimp, namespace):
         """Add search for handler based on a @libimp libimp instance
 
-        Known functions will be looked by {name}_symb in the @namespace
+        Known functions will be looked by {name}_symb or {name}_{ord}_symb in the @namespace
         """
         namespace = dict(
             (force_bytes(name), func) for name, func in viewitems(namespace)
@@ -259,12 +259,17 @@ class DSEEngine(object):
         # lambda cannot contain statement
         def default_func(dse):
             fname = libimp.fad2cname[dse.jitter.pc]
-            fname = b"%s_symb" % force_bytes(str(fname))
+            if isinstance(fname, tuple):
+                fname = b"%s_%d_symb" % (force_bytes(fname[0]), fname[1])
+            else:
+                fname = b"%s_symb" % force_bytes(fname)
             raise RuntimeError("Symbolic stub '%s' not found" % fname)
 
         for addr, fname in viewitems(libimp.fad2cname):
-            fname = force_bytes(str(fname))
-            fname = b"%s_symb" % fname
+            if isinstance(fname, tuple):
+                fname = b"%s_%d_symb" % (force_bytes(fname[0]), fname[1])
+            else:
+                fname = b"%s_symb" % force_bytes(fname)
             func = namespace.get(fname, None)
             if func is not None:
                 self.add_handler(addr, func)