depends的使用
📅 2026/7/4 12:27:09
👁️ 阅读次数
📝 编程学习
目录
Dependency Walker(depends.exe)完整作用
一、核心定位
二、主要功能
1. 递归查看所有 DLL 依赖关系
2. 快速定位缺失 DLL(最常用场景)
3. 区分 32 位 / 64 位架构不兼容问题
4. 查看导出函数、导入函数
5. 排查运行库、编译链接问题
6. 检测延迟加载 DLL
7. 输出完整依赖日志
三、典型使用场景
四、局限性(补充)
Depends 判断依赖库缺失的完整识别方法
一、界面颜色标记(最直观)
二、底部日志窗口提示文字
三、模块属性面板信息
四、特殊容易混淆的场景
1. 32/64 位不匹配(看起来像缺失)
2. 延迟加载 DLL
3. 系统 api-set 虚拟 dll(Windows 通用 CRT 库)
五、快速排查步骤
示例验证
一、未找到库,库丢失
二、找到库,但库内部还有缺失依赖。(故意屏蔽这段代码,库缺失)
三、依赖正常,不存在库缺失和丢了的问题
四、窗口分四部分介绍:
下载地址:
Dependency Walker(depends.exe)完整作用
一、核心定位
Windows 专用 PE 文件依赖分析工具,只解析.exe、.dll、.ocx、.sys这类 Windows 程序 / 动态库,相当于 Windows 下可视化版的依赖查询工具。
二、主要功能
1. 递归查看所有 DLL 依赖关系
自动逐层展开一级、二级、三级依赖,树形展示: 程序 A → 依赖 B.dll → B 又依赖 C.dll、D.dll 能看清整套程序需要哪些系统库、第三方库。
2. 快速定位缺失 DLL(最常用场景)
用颜色区分状态:
- 红色:电脑里完全找不到该 DLL 文件;
- 黄色:文件存在,但它自身还有下级依赖缺失; 打开报错 “丢失 xxx.dll” 的 exe,一眼就能看出缺哪个库。
3. 区分 32 位 / 64 位架构不兼容问题
如果 DLL 位数和程序不匹配,工具会标记异常,很多人明明有 dll 却打不开程序,就是这个原因。
4. 查看导出函数、导入函数
- 导出:这个 DLL 对外提供哪些函数给别的程序调用;
- 导入:当前程序需要调用外部 DLL 的哪些接口; 逆向、二次开发、排查函数找不到报错时用。
5. 排查运行库、编译链接问题
针对 VC/C++ 编译的程序:
- 检测是否缺 VC++ 运行库(msvcr、api-ms-win-crt 系列);
- 区分
/MD动态链接、/MT静态链接带来的依赖差异; 解决程序发给别人打不开的问题。
6. 检测延迟加载 DLL
带问号标记延迟加载库,这类库程序启动时不加载,运行到对应功能才加载,缺失会导致运行中途崩溃。
7. 输出完整依赖日志
底部日志窗口记录加载路径、报错信息,可以复制保存用于排错。
三、典型使用场景
- 双击 exe 提示 “缺少 xxx.dll”,用 depends 找缺失库;
- 自己编译的 Qt/OpenCV/VC 程序,发给别人无法运行,排查依赖;
- 判断程序是 32 位还是 64 位,以及配套 dll 位数;
- 开发调试:确认程序有没有多余依赖、不必要的系统库;
- 简单逆向:查看 dll 提供哪些接口函数。
四、局限性(补充)
- 只支持 Windows PE,不支持 Linux so、Java jar、macOS 程序
编程学习
技术分享
实战经验