Skip to content

Commit 1ee9171

Browse files
authored
Merge pull request #12 from serpilliere/fix_pe_getfunc
Fix pe getfunc
2 parents 75834be + 672c27f commit 1ee9171

File tree

1 file changed

+17
-15
lines changed

1 file changed

+17
-15
lines changed

elfesteem/pe.py

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -418,13 +418,13 @@ def set_rva(self, rva, size=None):
418418
elif isinstance(d.firstthunks, struct_array):
419419
tmp_thunk = d.firstthunks
420420
else:
421-
raise "no thunk!!"
421+
raise RuntimeError("No thunk!")
422422
elif d.originalfirstthunk: # and self.parent_head.rva2off(d.originalfirstthunk):
423423
tmp_thunk = d.originalfirstthunks
424424
elif d.firstthunk:
425425
tmp_thunk = d.firstthunks
426426
else:
427-
raise "no thunk!!"
427+
raise RuntimeError("No thunk!")
428428

429429
if tmp_thunk == d.originalfirstthunks:
430430
d.firstthunks = tmp_thunk
@@ -459,7 +459,7 @@ def build_content(self, c):
459459
elif d.firstthunk:
460460
tmp_thunk = d.firstthunks
461461
else:
462-
raise "no thunk!!"
462+
raise RuntimeError("No thunk!")
463463
for j, imp in enumerate(d.impbynames):
464464
if isinstance(imp, ImportByName):
465465
c[self.parent_head.rva2off(tmp_thunk[j].rva)] = str(imp)
@@ -551,34 +551,36 @@ def add_dlldesc(self, new_dll):
551551
for d in new_impdesc:
552552
self.impdesc.append(d)
553553

554-
def get_funcrva(self, f):
554+
def get_funcrva(self, dllname, funcname):
555555
if self.parent_head._wsize == 32:
556556
mask_ptr = 0x80000000 - 1
557557
elif self.parent_head._wsize == 64:
558558
mask_ptr = 0x8000000000000000L - 1
559559

560560
for i, d in enumerate(self.impdesc):
561+
if d.dlldescname.name.lower() != dllname.lower():
562+
continue
561563
if d.originalfirstthunk and self.parent_head.rva2off(d.originalfirstthunk):
562564
tmp_thunk = d.originalfirstthunks
563565
elif d.firstthunk:
564566
tmp_thunk = d.firstthunks
565567
else:
566-
raise "no thunk!!"
567-
if type(f) is str:
568+
raise RuntimeError("No thunk!")
569+
if type(funcname) is str:
568570
for j, imp in enumerate(d.impbynames):
569571
if isinstance(imp, ImportByName):
570-
if f == imp.name:
572+
if funcname == imp.name:
571573
return d.firstthunk + j * self.parent_head._wsize / 8
572-
elif type(f) in (int, long):
574+
elif type(funcname) in (int, long):
573575
for j, imp in enumerate(d.impbynames):
574576
if not isinstance(imp, ImportByName):
575-
if tmp_thunk[j].rva & mask_ptr == f:
577+
if tmp_thunk[j].rva & mask_ptr == funcname:
576578
return d.firstthunk + j * self.parent_head._wsize / 8
577579
else:
578-
raise ValueError('unknown func tpye %s' % str(f))
580+
raise ValueError('Unknown: %s %s' % (dllname, funcname))
579581

580-
def get_funcvirt(self, f):
581-
rva = self.get_funcrva(f)
582+
def get_funcvirt(self, dllname, funcname):
583+
rva = self.get_funcrva(dllname, funcname)
582584
if rva == None:
583585
return
584586
return self.parent_head.rva2virt(rva)
@@ -942,7 +944,7 @@ def set_rva(self, rva, size=None):
942944
elif d.firstthunk:
943945
tmp_thunk = d.firstthunks
944946
else:
945-
raise "no thunk!!"
947+
raise RuntimeError("No thunk!")
946948
for i, imp in enumerate(d.impbynames):
947949
if isinstance(imp, ImportByName):
948950
tmp_thunk[i].rva = isfromva(rva)
@@ -969,7 +971,7 @@ def build_content(self, c):
969971
elif d.firstthunk:
970972
tmp_thunk = d.firstthunks
971973
else:
972-
raise "no thunk!!"
974+
raise RuntimeError("No thunk!")
973975
for j, imp in enumerate(d.impbynames):
974976
if isinstance(imp, ImportByName):
975977
c[self.parent_head.rva2off(tmp_thunk[j].rva)] = str(imp)
@@ -1061,7 +1063,7 @@ def get_funcrva(self, f):
10611063
elif d.firstthunk:
10621064
tmp_thunk = d.firstthunks
10631065
else:
1064-
raise "no thunk!!"
1066+
raise RuntimeError("No thunk!")
10651067
if type(f) is str:
10661068
for j, imp in enumerate(d.impbynames):
10671069
if isinstance(imp, ImportByName):

0 commit comments

Comments
 (0)