如果我有一个 Windows 可执行文件,我该怎么找出它将加载哪些 dll?
我只是在谈论静态加载的 dll,而不是像 LoadLibrary 这样动态加载的 dll。
如果我有一个 Windows 可执行文件,我该怎么找出它将加载哪些 dll?
我只是在谈论静态加载的 dll,而不是像 LoadLibrary 这样动态加载的 dll。
dumpbin 是 VC++ 自带的工具。
要查看一个程序将导入哪些 DLL:
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
打开命令提示符,然后键入以下命令:
tasklist /m /fi "imagename eq netbeans.exe"
将netbeans.exe替换为您的exe文件名。
Dependency Walker可以帮助你确定将要被加载的.dll文件。
Dependency Walker
尝试查找DLL及其层次依赖关系。 - SuB只需转到命令提示符并键入tasklist /m
,即可查看特定程序使用的dll文件列表。
Microsoft .Net 解决方案:
foreach (AssemblyName a in Assembly.ReflectionOnlyLoadFrom("SAMPLE.EXE").GetReferencedAssemblies())
{
MessageBox.Show(a.Name);
}
Dependencies - 一个开源的现代依赖项查找器可以显示Windows可执行文件将加载哪些DLL,并且在现代Windows 10中运行良好。
它的功能比Dependency Walker稍弱,但后者可能无法在Windows 10上工作,因为它最后更新于2006年。(Dependency Walker的新版本曾与某些Windows 10开发工具包捆绑在一起,但现在不再支持。)
进程资源管理器 随附SysInternals套件 https://learn.microsoft.com/en-us/sysinternals/downloads/sysinternals-suite
优点:允许探索已经运行的进程(我还没有找到一种方法将依赖项查看器附加到现有进程)
.exe
的 DLL,而不是可执行文件间接依赖的 DLL。 - SuB