静态链接不是一种选择。
假设我有一个依赖于DLL的可执行文件。一种解决方案是将DLL与可执行文件放在同一文件夹中。现在让我们说我需要将一个DLL注入一个依赖于DLL的进程。因为注入了DLL,我将把它依赖的DLL放在哪里?在同一个文件夹中?或者在注入?
的进程的目录中答案 0 :(得分:5)
依赖于一个或多个其他DLL的DLL并不是特别的。即使是一个普通的DLL也会依赖于驻留在其他DLL中的Windows共享组件。这些“共享组件”的一个很好的例子是Kernel32.dll
和CRT DLL,例如MSVCR80.DLL
等。
通过调用Dependency Walker,您可以准确找到DLL或EXE所需的其他DLL。为此,只需从Visual Studio命令提示符运行depends.exe
,然后将感兴趣的DLL拖放到出现的窗口中。如果您没有可用的依赖者walker,可以从上面的链接下载它。
我不确定DLL注入的东西,但是如果将所有(其他DLL)依赖项放在与DLL相同的文件夹中,通常应该足够了,这将是EXE加载这些DLL的文件夹驻留。
例如:如果C:\test\foo.exe
需要bar.dll
(反过来需要baz.dll
,假设baz.dll
不是标准的Windows共享组件),那么您将bar.dll
放置baz.dll
在C:\test
中有1}}和{{1}}。
操作系统如何确定要加载哪个DLL还有很多,因为在不同的位置可能存在同一DLL的多个版本,并且MSDN对动态链接库的搜索顺序有一个有用的article。 / p>