【问题标题】:LoadLibrary from another DLL从另一个 DLL 加载库
【发布时间】:2011-08-12 07:37:00
【问题描述】:

DLL 查找路径,如in MSDN 所述,为:

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

这引发了以下疑问:

假设我在某个目录中有一个可执行文件,例如:c:\execdir\myexe.exe,它加载了一个在PATH 中找到并位于c:\dlldir\mydll.dll 中的DLL。现在,假设mydll.dll 尝试使用LoadLibrary 加载另一个DLL。首先查看哪个目录 - c:\dlldir 或 c:\execdir?

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

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

附:我对 Windows XP 和 7 都感兴趣。

【问题讨论】:

  • 我不明白您在阅读文档后有什么困惑。这对我来说似乎很清楚。为什么加载第二个 DLL 会改变路径查找顺序?
  • @Cody:因为它是第二个 DLL,而不是 .exe - .exe 甚至不知道从第一个加载的第二个 DLL
  • @Hans:谢谢,我编辑了另一个相关问题
  • c:\dlldir 被隐式​​查看。否则将永远找不到 DLL。 5 条规则中只有两条适用:PATH 或当前目录。

标签: windows dll path loadlibrary


【解决方案1】:

是的,它首先是可执行目录,它是在某些情况下实现的this could lead to a security vulnerability。该页面上有一些建议,可确保您的应用程序不会通过此机制受到损害。

【讨论】:

  • 所以,c:\dlldir 永远不会被查看,因为它既不是“可执行文件所在的位置”也不是“当前目录”?
  • @Eli 如果不在PATH上,不是当前目录或特殊系统目录或原始可执行文件的目录(假设它实际上是c:\dlldir而不是@987654324 @ 例如)然后不,它不会。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
相关资源
最近更新 更多