如何查找一个可执行文件将加载哪些动态链接库(DLL)?

86

如果我有一个 Windows 可执行文件,我该怎么找出它将加载哪些 dll?

我只是在谈论静态加载的 dll,而不是像 LoadLibrary 这样动态加载的 dll。

10个回答

72

dumpbin 是 VC++ 自带的工具。

要查看一个程序将导入哪些 DLL:

  • 打开 Visual Studio
  • 选择菜单项 Tools | Visual Studio 命令提示符
  • 进入可执行文件所在的文件夹
  • 运行命令 dumpbin /dependents whatever.exe
Dump of file whatever.exe

File Type: EXECUTABLE IMAGE

  Image has the following dependencies:

    AIOUSB.DLL
    sqlite3.dll
    wxmsw293u_core_vc_custom.dll
    wxbase293u_vc_custom.dll
    KERNEL32.dll
    ole32.dll
    OLEAUT32.dll
    MSVCP90.dll
    MSVCR90.dll
要查看它将导入哪些函数(和DLL),请使用:
C:\> dumpbin /imports whatever.exe

5
我认为应该这样做:dumpbin /dependents whatever.exe。 - Baiyan Huang
4
/dependents 只显示动态链接库(DLLs)。/imports 则展示函数和动态链接库(DLLs)。 - Graeme Perrow
1
这是最好的答案。不幸的是,这个工具只显示直接加载到 .exe 的 DLL,而不是可执行文件间接依赖的 DLL。 - SuB

38

7
安装在Visual Studio/VB/...中的"depends.exe"和可以从http://dependencywalker.com/下载的"depends.exe"是完全相同的工具,只是版本不同。 ;) - Paul Groke
2
连接已失效。 - ice1000

23

打开命令提示符,然后键入以下命令:

tasklist /m /fi "imagename eq netbeans.exe"

将netbeans.exe替换为您的exe文件名。


1
我使用了这个方法,但它没有给我完整的DLL列表,我的exe使用了一堆CrystalReports DLL,但在通过该命令打印的列表中没有看到任何提到。有什么想法吗? - user734028
1
我认为这需要应用程序正在运行。 - Bitterblue

13

不错的GUI程序。Dependency Walker尝试查找DLL及其层次依赖关系。 - SuB

12

只需转到命令提示符并键入tasklist /m,即可查看特定程序使用的dll文件列表。


是的,这确实可以做到你说的那样。但是,如果一个可执行文件启动了多个进程,你将永远无法从命令行中找出哪个进程是由可执行文件启动的,因此你将不知道可执行文件的所有依赖dll。 - Fazi
不加载路径。 - Josué Zatarain

3

Microsoft .Net 解决方案:

foreach (AssemblyName a in Assembly.ReflectionOnlyLoadFrom("SAMPLE.EXE").GetReferencedAssemblies()) 
{
    MessageBox.Show(a.Name); 
}

该解决方案未包含其子项所需的参考 DLL。 - DotNet Programmer

2
有一个方便的工具叫做NDepend,它会给你所有的DLL依赖关系。

"NDepend"是一种用于.NET托管代码的静态分析工具,因此它仅适用于.NET应用程序。 - SuB
你忘了提到它作为VS扩展工作的事实。 - Josué Zatarain
@SuB 已经存在一个 C++ 版本的 NDepend: https://www.cppdepend.com/ - Patrick from NDepend team


1

Dependencies - 一个开源的现代依赖项查找器可以显示Windows可执行文件将加载哪些DLL,并且在现代Windows 10中运行良好。

它的功能比Dependency Walker稍弱,但后者可能无法在Windows 10上工作,因为它最后更新于2006年。(Dependency Walker的新版本曾与某些Windows 10开发工具包捆绑在一起,但现在不再支持。)


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接