@@ -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