Microsoft Visual Studio VS dumpbin使用查看.obj、.lib、.dll、.exe文件头、段函数
前言全局说明
dumpbin 是VS自带的 Microsoft COFF二进制文件转换器,它显示有关通用对象文件格式(COFF)二进制文件的信息。可以使用dumpbin检查COFF对象文件、标准COFF对象库、可执行文件和动态链接库等。
被查看的文件名后缀可以为:.obj、.lib、.dll、.exe
除了 VS 的 dumpbin 查看,还可以用 用工具depends来查看
http://www.dependencywalker.com/
一、说明
正确情况下,安装好VS后路径被加入到系统 PATH 中了,可以任意路径调用 dumpbin
dumpbin 文件路径:
VS 2010: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin
VS 2013: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin
VS 2019: C:\Program Files (x86)\Microsoft Visual Studio 10.0\2019\Community
VS 2022:X:\vs2022\VC\Tools\MSVC\14.40.33807\bin\Hostx64\x86
以上路径只是示例,为了更块知道大概路径
二、dumpbin 命令
2.1 查看帮助
dumpbin
或
dumpbin /SUMMARY
或
dumpbin /?
或
dumpbin -?
如果没有给dumpbin指定任何选项,它将等同于使用了/SUMMARY参数。如果没有指定任何输入文件,它将列出所有的选项。
2.2 使用格式为
dumpbin [选项] <文件名>
2.3 参数
参数 | 说明 | 备注 |
---|---|---|
/ALL | 显示除代码反汇编外的所有可用信息 | |
/ARCHIVEMEMBERS | 显示有关库成员对象的最少信息 | |
/CLRHEADER | 显示有关在任何托管程序中使用的 .NET 头的信息 | |
/DEPENDENTS | 转储映像从中导入函数的 DLL 的名称 | |
/DIRECTIVES | 转储映像中由编译器生成的 .directive 节 | |
/DISASM[:{BYTES|NOBYTES}] | 显示代码段的反汇编,如果出现在文件中则使用符号 | |
/ERRORREPORT:{NONE | PROMPTt|QUEUE|SEND} | |
/EXPORTS | 显示从可执行文件或 DLL 导出的所有定义 | |
/FPO | 显示框架指针优化 (FPO) 记录 | |
/HEADERS | 显示文件头和每节的头。当用于库时,显示每个成员对象的头 | |
/IMPORTS[:文件名] | 显示导入到可执行文件或 DLL 的 DLL 列表(静态链接的和延迟加载 )和上述每个 DLL 的各个导入 | |
/LINENUMBERS | 显示 COFF 行号 | |
/LINKERMEMBER[:{1|2}] | 显示库中定义的公共符号。指定参数 1 将按对象顺序显示符号及其偏移量。指定参数 2 将显示对象的偏移量和索引号,然后按字母顺序列出这些符号及每个符号的对象索引 | |
/LOADCONFIG | 转储 IMAGE_LOAD_CONFIG_DIRECTORY 结构,此结构是由 Windows NT 加载程序使用并在 WINNT.H 中定义的可选结构。 | |
/NOLOGO | ||
/OUT:filename | ||
/PDATA | 仅用于 RISC 处理器。此选项从映像或对象转储异常表 (.pdata) | |
/PDBPATH[:VERBOSE] | 将沿调试器搜索 .pdb 文件的同一路径搜索计算机,并将报告哪些 .pdb 文件(若有)和 filename 中指定的文件相对应 | |
/RANGE:vaMin[,vaMax] | ||
/RAWDATA[:{NONE|1|2|4|8}[,#]] | 此选项显示文件中每节的原始内容 | |
/RELOCATIONS | 此选项显示对象或映像中的任何重定位 | |
/SECTION:名称 | ||
/SUMMARY | 如果没有给dumpbin指定任何选项,它将等同于使用了/SUMMARY参数 | |
/SYMBOLS | ||
/TLS | ||
/UNWINDINFO |
2.3 选项说明:
参数的使用可以用”-”或者”/”(如-ALL等于/ALL)后面跟选项名。
有些选项可以在选项名后接”:”。使用空格或制表符(Tab)分割命令选项。
选项名,关键字和文件名是不区分大小写的。大多数的参数可以应用于所有的二进制文件,有少部分参数只能用于特定的文件。
三、示例
3.1 查看 exe 信息
查看一个exe引用了哪些动态库
dumpbin /HEADERS E:\main.exe
或
dumpbin -HEADERS E:\main.exe
3.2 查看 dll 信息
查看动态库包含哪些接口函数
dumpbin /exports E:\main.exe
或
dumpbin –exports dlltest.dll
Your_Functions_Here 就是接口函数名。
3.3 查看系统dll
dumpbin.exe /exports c:\windows\system32\user32.dll
或
dumpbin /exports C:\Windows\System32\msvcrt.dll
四、扩展用法
4.1 过滤函数名
函数名太多时,可以用管道和findstr来过滤
dumpbin /EXPORTS "gdal.lib" | findstr GDALDropCache
4.2 多个参数
多个选项间用空格分开,多个文件名间也用空格分开
dumpbin /ALL/RAWDATA:NONE /OUT:1.txt text.obj
或
dmpbin /ALL /RAWDATA:NONE test.obj >1.txt
4.3 输出到文件中
dumpbin.exe /ALL D:\xxx.dll > D:\VS_dumpbin_file_info.txt
免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。
参考、来源:
https://www.cnblogs.com/cyx-b/p/13488380.html (#### 2.2)
https://blog.51cto.com/u_14523369/6123768 (#### 3.2)
https://blog.csdn.net/jiangnanan/article/details/134893353 (#### 3.2)
https://www.bilibili.com/opus/963232349848338436 (#### 4.1)
https://zhuanlan.zhihu.com/p/646528551 (#### 4.2)
https://jingyan.baidu.com/article/5553fa82b953b365a23934b7.html (#### 3.3)
https://blog.csdn.net/zztoll/article/details/105325155 (#### 3.3) (depends来查看)
https://zhuanlan.zhihu.com/p/646528551 (depends来查看)