3

静态链接不是一种选择。

假设我有一个依赖 DLL 的可执行文件。一种解决方案是将 DLL 与可执行文件放在同一文件夹中。现在假设我需要将 DLL 注入到依赖 DLL 的进程中。因为 DLL 是注入的,我将把它依赖的 DLL 放在哪里?在同一个文件夹中?或者在注入的进程的目录中?

4

1 回答 1

6

依赖于一个或多个其他 DLL 的 DLL 并不是什么特别的东西。即使是微不足道的 DLL 也会依赖于驻留在其他 DLL 中的 Windows 共享组件。这些“共享组件”的一个很好的例子是Kernel32.dllCRT DLL 等MSVCR80.DLL

您可以通过调用Dependency Walker准确找出您的 DLL 或 EXE 需要哪些其他 DLL 。为此,只需depends.exe从 Visual Studio 命令提示符运行并将感兴趣的 DLL 拖放到出现的窗口中。如果您没有可用的依赖项步行器,您可以从上面的链接下载它。

我不确定 DLL 注入的东西,但如果将所有(其他 DLL)依赖项放在与 DLL 相同的文件夹中,通常应该就足够了,这将是加载这些 DLL 的 EXE 所在的文件夹。

例如:如果C:\test\foo.exe需要bar.dll(这又需要baz.dll,假设baz.dll不是标准的 Windows 共享组件),那么您可以将bar.dllbaz.dll放在C:\test.

操作系统如何确定加载哪个 DLL 的方式还有很多,因为同一 DLL 的多个版本可能存在于不同的位置,而且 MSDN 有一篇关于动态链接库搜索顺序的有用文章

于 2013-04-24T02:50:44.747 回答