使用Visual Studio自带工具dumpbin解析PE文件
如果想查看PE文件或库包含了哪些函数以及相关的信息(符号清单),可以通过VS自带的dumpbin工具来完成。
介绍
dumpbin.exe为Microsoft COFF二进制文件转换器,它显示有关通用对象文件格式(COFF)二进制文件的信息。可以使用dumpbin检查COFF对象文件、标准COFF对象库、可执行文件和动态链接库等。
使用方法
在“开始”中找到“Visual Studio 2019”文件夹,打开后找到“x86 Native Tools Command Prompt for VS 2019”,双击打开
打开后,直接输入dumpbin,然后回车,即可得到帮助信息
翻译如下:
/ALL 显示除代码反汇编外的所有可用信息
/ARCHIVEMEMBERS 显示有关库成员对象的最少信息
/CLRHEADER 显示有关在任何托管程序中使用的 .NET 头的信息
/DEPENDENTS 转储映像从中导入函数的 DLL 的名称
/DIRECTIVES 转储映像中由编译器生成的 .directive 节
/DISASM[:{BYTES|NOBYTES}] 显示代码段的反汇编,如果出现在文件中则使用符号
/ERRORREPORT:{NONE|PROMPT|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 此选项显示对象或映像中的任何重定位
使用格式为:dumpbin 选项 文件名
格式说明:
多个选项间用空格分开,多个文件名间也用空格分开,文件名可以为后缀为.obj、.lib、.dll、.exe,如 dumpbin /ALL/RAWDATA:NONE /OUT:1.txt text.obj (dmpbin /ALL /RAWDATA:NONE test.obj >1.txt)。如果没有给dumpbin指定任何选项,它将等同于使用了/SUMMARY参数。如果没有指定任何输入文件,它将列出所有的选项。
选项说明:参数的使用可以用”-”或者”/”(如-ALL等于/ALL)后面跟选项名。有些选项可以在选项名后接”:”。使用空格或制表符(Tab)分割命令选项。选项名,关键字和文件名是不区分大小写的。大多数的参数可以应用于所有的二进制文件,有少部分参数只能用于特定的文件。
示例
比如,我当前有个名为“main.exe”的可执行文件,想查看文件头的信息
命令如下:
dumpbin /HEADERS E:\娱乐\网易云音乐\crack\ncmdump\main.exe
运行结果为:
PE signature found
File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
8664 machine (x64)
4 number of sections
0 time date stamp
216C00 file pointer to symbol table
0 number of symbols
F0 size of optional header
223 characteristics
Relocations stripped
Executable
Application can handle large (>2GB) addresses
Debug information stripped
OPTIONAL HEADER VALUES
20B magic # (PE32+)
3.00 linker version
1E8600 size of code
2DC00 size of initialized data
0 size of uninitialized data
51360 entry point (0000000000451360)
1000 base of code
400000 image base (0000000000400000 to 0000000000638FFF)
1000 section alignment
200 file alignment
4.00 operating system version
1.00 image version
4.00 subsystem version
0 Win32 version
239000 size of image
600 size of headers
0 checksum
3 subsystem (Windows CUI)
0 DLL characteristics
200000 size of stack reserve
1000 size of stack commit
100000 size of heap reserve
1000 size of heap commit
0 loader flags
10 number of directories
0 [ 0] RVA [size] of Export Directory
237000 [ 3FE] RVA [size] of Import Directory
0 [ 0] RVA [size] of Resource Directory
0 [ 0] RVA [size] of Exception Directory
0 [ 0] RVA [size] of Certificates Directory
0 [ 0] RVA [size] of Base Relocation Directory
0 [ 0] RVA [size] of Debug Directory
0 [ 0] RVA [size] of Architecture Directory
0 [ 0] RVA [size] of Global Pointer Directory
0 [ 0] RVA [size] of Thread Storage Directory
0 [ 0] RVA [size] of Load Configuration Directory
0 [ 0] RVA [size] of Bound Import Directory
1EA000 [ 118] RVA [size] of Import Address Table Directory
0 [ 0] RVA [size] of Delay Import Directory
0 [ 0] RVA [size] of COM Descriptor Directory
0 [ 0] RVA [size] of Reserved Directory
SECTION HEADER #1
.text name
1E8482 virtual size
1000 virtual address (0000000000401000 to 00000000005E9481)
1E8600 size of raw data
600 file pointer to raw data (00000600 to 001E8BFF)
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
60000060 flags
Code
Initialized Data
Execute Read
SECTION HEADER #2
.data name
4C0D8 virtual size
1EA000 virtual address (00000000005EA000 to 00000000006360D7)
2DC00 size of raw data
1E8C00 file pointer to raw data (001E8C00 to 002167FF)
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
C0000040 flags
Initialized Data
Read Write
SECTION HEADER #3
.idata name
3FE virtual size
237000 virtual address (0000000000637000 to 00000000006373FD)
400 size of raw data
216800 file pointer to raw data (00216800 to 00216BFF)
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
C0000040 flags
Initialized Data
Read Write
SECTION HEADER #4
.symtab name
4 virtual size
238000 virtual address (0000000000638000 to 0000000000638003)
200 size of raw data
216C00 file pointer to raw data (00216C00 to 00216DFF)
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
42000000 flags
Discardable
Read Only
Summary
4D000 .data
1000 .idata
1000 .symtab
1E9000 .text