windows - LoadLibrary fra en anden DLL

Indlæg af Hanne Mølgaard Plasc

Problem



DLL-opslagsbanen som beskrevet i MSDN er: [10]



  1. Den mappe, hvor det eksekverbare modul til den aktuelle proces er placeret.

  2. Den nuværende mappe.

  3. Windows-systemkatalogen. Funktionen GetSystemDirectory henter stien i denne mappe.

  4. Windows-mappen. Funktionen GetWindowsDirectory henter stien i denne mappe.

  5. De mapper, der er angivet i PATH-miljøvariablen.



Hvilket skaber følgende tvivl:


Antag, at jeg har en eksekverbar i nogle mapper, siger: c:execdirmyexe.exe og den indlæser en DLL, der findes i PATH og er placeret i c:dlldirmydll.dll. Antag nu mydll.dll at indlæse en anden DLL med LoadLibrary. Hvilken mappe vil blive kigget på først - c:dlldir eller c:execdir?


Jeg tror, ​​at de ovenfor nævnte opslagsregler siger, at det vil være c:execdir fordi det angiveligt er 'den mappe, hvor det eksekverbare modul til den aktuelle proces er placeret', men det ville være rart at få en bekræftelse fra en anden kilde.


EDIT: Er også c:dlldir kigget på overhovedet ? Det er trods alt ikke, hvor .exe er placeret eller den 'nuværende katalog' (hvis det er meningen i den generelle forstand).


P. S. Jeg er interesseret i både Windows XP og 7.

Bedste reference


Ja, det er den eksekverbare mappe først, og det blev indset, at dette kunne føre til en sikkerhedssårbarhed under visse omstændigheder. Der er råd på den side for at sikre, at din ansøgning ikke kompromitteres via denne mekanisme. [11]