如何确定可执行文件将加载哪些dll?


75

如果我有Windows可执行文件,如何确定它将加载哪些dll?

我只是在谈论哪些将静态加载,而不是那些可能通过LoadLibrary之类的动态加载方式。

Answers:



58

dumpbin是VC ++附带的工具。

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

  • 打开Visual Studio
  • 菜单项工具| Visual Studio命令提示
  • cd到包含可执行文件的文件夹
  • dumpbin / depends what.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 /
depends what.exe

4
/ depends仅向您显示DLL。/ imports向您显示函数DLL。
Graeme Perrow,2009年

1
这是最好的答案。不幸的是,此工具仅显示直接为.exe可执行文件间接依赖的DLL加载的DLL。
2016年

15

打开命令提示符,然后在命令下方键入

任务列表/ m / fi“映像名称eq netbeans.exe”

改用您的exe文件名键入netbeans.exe。


1
我用了它,它没有给我它使用的dll的完整列表,我的exe正在使用一堆crystalreports dll,但是我看不到通过该命令打印的列表中提到的任何内容。有任何想法吗?
user734028 '18

12

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


是的,这就是您要说的,但是,如果一个可执行文件启动了多个进程,您将永远无法从命令行中找到该可执行文件启动了哪个进程,因此您将不知道该可执行文件的所有相关dll。
法兹(Fazi)2013年

不加载路径。
苏埃Zatarain埃斯皮诺萨


3

Microsoft .Net解决方案:

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


1

有一个方便的工具叫做NDepend,它将为您提供所有DLL依赖项。


NDepend是.NET托管代码的静态分析工具”。因此,它仅适用于.Net应用程序。
2016年

您忘了提到它作为vs扩展。
苏埃Zatarain埃斯皮诺萨

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.