depends的使用

目录

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. 输出完整依赖日志

底部日志窗口记录加载路径、报错信息,可以复制保存用于排错。

三、典型使用场景

  1. 双击 exe 提示 “缺少 xxx.dll”,用 depends 找缺失库;
  2. 自己编译的 Qt/OpenCV/VC 程序,发给别人无法运行,排查依赖;
  3. 判断程序是 32 位还是 64 位,以及配套 dll 位数;
  4. 开发调试:确认程序有没有多余依赖、不必要的系统库;
  5. 简单逆向:查看 dll 提供哪些接口函数。

四、局限性(补充)

  1. 只支持 Windows PE,不支持 Linux so、Java jar、macOS 程序