使用dumpbin和depends查看dll(exe)的依赖
使用dumpbin和depends查看dll(exe)的依赖
在软件开发过程中,了解DLL或EXE的依赖关系对于排除加载和执行故障至关重要。本文将详细介绍如何使用dumpbin和Dependency Walker这两个工具来查看DLL/EXE的依赖关系,并提供了解决Dependency Walker在Win10上无响应问题的方案。
1. 使用dumpbin查看一级依赖
要使用dumpbin查看DLL或EXE的依赖关系,首先需要定位到dumpbin文件夹。通常情况下,该文件夹位于C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64
。如果难以定位,可以使用Everything等工具进行查找。
在dumpbin文件夹下打开命令提示符(cmd),然后输入相应的dumpbin命令即可查看依赖关系。需要注意的是,dumpbin只能查看一级依赖。
查找DLL所有依赖
dumpbin /dependents xxxx.exe #即可查询该exe的依赖项dll。
dumpbin /dependents *.dll #查询所有依赖
查看导出函数的名字
dumpbin /exports /dependents D:\0_Project_C++\CsharpTestDll\CsharpTestDll\bin\Release\TestDll.dll
查看程序依赖库dll的步骤
- 查看依赖:
dumpbin /dependents *.dll #查询所有依赖
- 用Everything查找依赖库的位置并拖动到当前exe目录,全部拷贝过来肯定能运行
- 删除某个DLL再看能否运行
- 如果有自己编写的dll,请单独检查其依赖,将对应的依赖库也拷贝过来
- 如果经过上述步骤还不能运行,请检查版本或自己编写的dll是否有问题
2. 使用Dependency Walker查看所有依赖
Dependency Walker是一个功能强大的免费工具,可以扫描任何32位或64位Windows模块(如EXE、DLL、OCX、SYS等),并建立所有相关模块的分层树形图。它对于排除加载和执行模块故障错误非常有用,能够检测出许多常见应用问题,例如缺少模块、无效的模块、导入/导出不匹配、循环依赖错误、不匹配的机器类型模块和模块初始化失败。
下载与使用
下载地址:http://www.dependencywalker.com/
下载后,可以直接打开depends.exe,将exe或dll文件拖入其中即可查看依赖关系。
解决Win10无响应问题
在Windows 10上使用Dependency Walker时,可能会遇到无响应的问题。这主要是因为depends.exe运行时需要搜索的路径过多。以下是两种解决方案:
手动设置PATH
- 创建一个名为run_depends.txt的文件
- 输入以下内容(两行)
set PATH=""
"D:\Tools\depends\depends22_x64\depends.exe"
注意:请根据实际情况修改exe路径,且路径中不要包含中文字符。
- 将run_depends.txt的后缀名改为bat,即成为run_depends.bat脚本文件。
- 双击运行run_depends.bat,运行之后,可以看到depends运行界面,然后把你要分析的dll或者exe拖进去,大概10秒左右能出来结果,比之前看起来卡死的情况快多了。
在Dependency Walker设置PATH
Dependency Walker本身支持设置搜索路径。可以通过以下步骤进行设置:
- 打开Dependency Walker
- 选择菜单栏中的
Options
->Configure Module Search Order…
- 在弹出的设置界面中,根据需要进行设置
3. 总结
- dumpbin只能查看一级依赖,如果需要一次查看所有依赖则需要使用Dependency Walker。
- Dependency Walker可以自定义搜索目录,合理设置搜索目录,会大大提高搜索速度!
- 默认情况下,Dependency Walker会搜索PATH指定的路径,所以也可以通过修改PATH环境变量的值达到相同的效果。
- 如果长时间(大概5秒钟)没有处理界面消息的话,界面就会无响应。