原文网址:https://zhuanlan.zhihu.com/p/395557318
1. 简介
本文介绍确定 exe 依赖的 dll 的方法,也可以用于查看 dll 的依赖项。
2. 方法一:lucasg/Dependencies(开源版的现代 Dependency Walker)
仓库:https://github.com/lucasg/Dependencies
当前最新版:
下载解压后,找到 DependenciesGui.exe
打开软件。命令行使用则用 Dependencies.exe
。
3. 方法二:dumpbin (需要安装 Visual Studio)
dumpbin.exe /dependents filename.exe
dumpbin.exe 可能在的位置(与安装的 VS 版本相关):
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30037\bin\Hostx86\x86
4. 方法三:Dependency Walker(过时)
此软件在 Windows 10 下分析任何 exe 都会进入未响应状态,无法使用。官网对此说明是只支持到了 win8。用 win10 的小伙伴可以不选此方法。
软件界面Dependency Walker runs on Windows 95, 98, Me, NT, 2000, XP, 2003, Vista, 7, and 8. It can process any 32-bit or 64-bit Windows module, including ones designed for Windows CE. -- Dependency Walker 官网
直接到Dependency Walker 官网下载即可。目前最新是 2.2,下载链接:
解压后双击 depends.exe 运行。
点击 Open 然后选择需要分析的 exe 即可看到列表。
5. 小结
日常使用推荐使用 lucasg/Dependencies
,列出的内容全面,不但有 dll,还有当前会加载到的文件的完整路径,还能看到相应模块导出的函数及地址。
Dependency Walker 已经比较过时,win10 上不能正常运行。在老旧系统上或许还可以用。
至于 dumpbin,对于开发者来说可以用作安装过 VS 之后的临时使用、救急的方案。但是 dumpbin 功能不止于依赖分析,还有其他使用场景。
6. 参考资料
- Dependency Walker 官网
- Dependency walker hangs
- 关于 dependency walker 的 API-MS-WIN-APPMODEL-IDENTITY-L1-2-0.DLL 找不到问题
You will see that your program runs fine when dependency_walker says these dlls are missing. API-MS-WIN-em.dll EXT-MS-WIN-/em.dll IESHIMS.dll EMCLIENT.dll DEVICELOCKHELPERS.dll https://stackoverflow.com/a/40077240/4394850
- On API-MS-WIN-XXXXX.DLL, and Other Dependency Walker Glitches 对于 API-MS-WIN 系列的总览解释。
- Dependency Walker with kernel32.dll on Windows 10
- Windows API sets
All versions of Windows 10 share a common base of OS components that is called the core OS (in some contexts this common base is also called OneCore). In core OS components, Win32 APIs are organized into functional groups called API sets. Although contract names appear similar to DLL names in this context, they are fundamentally different from DLL module names and do not directly refer to a file on disk.
- Runtime DLL name resolution: ApiSetSchema - Part I 关于 API sets 机制的逆向工程研究。
- Windows umbrella libraries
- 如何查看一个exe\dll文件的依赖项