4

MSDN中所述,DLL 查找路径为:

  1. 当前进程的可执行模块所在的目录。
  2. 当前目录。
  3. Windows 系统目录。GetSystemDirectory 函数检索此目录的路径。
  4. Windows 目录。GetWindowsDirectory 函数检索此目录的路径。
  5. PATH 环境变量中列出的目录。

这带来了以下疑问:

假设我在某个目录中有一个可执行文件,例如:c:\execdir\myexe.exe它加载了一个 DLL,该 DLLPATH位于c:\dlldir\mydll.dll. 现在,假设mydll.dll尝试使用LoadLibrary. 首先将查看哪个目录 -c:\dlldirc:\execdir

我认为上面引用的查找规则说这将是c:\execdir因为据称这是“当前进程的可执行模块所在的目录”,但最好从另一个来源获得确认。

编辑:另外,被c:\dlldir\看了?毕竟,它既不是 .exe 所在的位置,也不是“当前目录”(如果这是一般意义上的意思)。

PS我对Windows XP和7都感兴趣。

4

1 回答 1

4

是的,它首先是可执行目录,并且人们意识到这在某些情况下可能会导致安全漏洞。该页面上有一些建议,可确保您的应用程序不会通过此机制受到损害。

于 2011-04-25T13:00:48.370 回答