diff options
| author | Vladislav HrĨka <nofiv@users.noreply.github.com> | 2020-07-14 12:58:06 +0200 |
|---|---|---|
| committer | ESET GitHub Admin <github@eset.com> | 2020-07-14 10:56:58 -0400 |
| commit | 1d24520ebfe25e5cdc89740ca694e15f36649de9 (patch) | |
| tree | 1ae7dc1cecf181f5ee44e3ef8e9f8401bbb814c5 | |
| parent | d9ffe10a32c6a28da5f15f267ed773a48e9e485c (diff) | |
| download | focaccia-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.py | 13 |
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) |