跳到主要内容

dumpbin 常用命令教程

简介​

本教程收录 dumpbin 的常用命令,每条命令对应一个明确的目的,直接复制到「开发者命令提示符」中执行即可。dumpbin 随 Visual Studio 安装,普通 CMD 里直接调用会提示「不是内部或外部命令」,请先从开始菜单打开 Developer Command Prompt for VS 2022(老版本为 Visual Studio 2005 Command Prompt)。


验证程序定义的系统版本号​

命令​

dumpbin /headers your_app.exe | findstr /i "subsystem version"

预期输出​

4 subsystem version
5.01 operating system version

输出解析​

  • subsystem version:链接器 /SUBSYSTEM 的版本值,5.01 表示 XP,6.00 表示 Vista / Server 2008,6.01 表示 Windows 7,10.00 表示 Windows 10 及以上。程序最低能在哪个系统上启动,由这一行决定。
  • operating system version:PE 头声明的系统版本,用于排查「在低版本系统提示缺少 xxx.dll」这类问题。

补充说明​

findstr /i 中的 /i 表示忽略大小写,dumpbin 输出的大小写不固定,建议始终带上。


查看文件架构(32 位 / 64 位)​

命令​

dumpbin /headers your_app.exe | findstr /i "machine"

预期输出​

8664 machine (x64)

输出解析​

  • 14C machine (x86):32 位
  • 8664 machine (x64):64 位
  • AA64 machine (ARM64):ARM64

查看 DLL 导出的函数​

命令​

dumpbin /exports demo.dll | findstr /i "Add"

预期输出​

1 0 00001000 Add

输出解析​

  • ordinal:导出序号,可用 GetProcAddress(hMod, MAKEINTRESOURCE(1)) 按序号取地址
  • hint:链接器查找提示值,不影响调用
  • name:导出名,C++ 函数为修饰名(如 ?Add@Math@@YAHHH@Z)

修饰名还原为可读签名​

undname ?Add@Math@@YAHHH@Z

查看依赖的 DLL​

命令​

dumpbin /dependents your_app.exe | findstr /i "dll"

预期输出​

KERNEL32.dll
MSVCR120.dll
api-ms-win-crt-runtime-l1-1-0.dll

输出解析​

  • MSVCR120.dll 对应 VS2013 运行库,MSVCP140.dll 对应 VS2015 及以上,缺哪个就装对应版本的 Visual C++ 运行库
  • /dependents 只显示直接依赖,不递归;要看二级依赖需逐个文件再执行一次

查看静态库里的符号​

命令​

dumpbin /symbols mylib.lib | findstr /i "Foo"

预期输出​

00A 00000000 SECT3 notype () External | ?Foo@@YAXXZ (void __cdecl Foo(void))

输出解析​

  • 带 External 且有段号(如 SECT3):符号已定义
  • 显示 UNDEF:仅引用未定义,链接时仍需其它库

常见问题排查​

问题1:提示「不是内部或外部命令」​

解决方案: 从开始菜单打开 Visual Studio 开发者命令提示符,或在普通 CMD 中先执行环境初始化:

call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"

问题2:找不到要查的内容​

解决方案: 把输出重定向到文件,再用 findstr 或编辑器搜索:

dumpbin /headers your_app.exe > headers.txt

问题3:托管程序集(.NET)查不到信息​

解决方案: dumpbin 只解析原生 PE 文件,托管程序集改用 ildasm。