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。