PE文件-FileHeader解剖

通过前面研究已经知道PE文件的整个文件一开始是DOS存根,接着是NT头,NT头又是由签名信息、FileHeader和OptionalHeader组成,本文重点是解剖FileHeader。

我们直接查看winnt.h头文件

%title插图%num

Machine。WORD类型,占2个字节,该字段表示机器类型,主要指CPU类型。微软的官方文档对其解释的也是这个意思。

%title插图%num
%title插图%num

The number that identifies the type of target machine. For more information, see Machine Types.

标识目标计算机类型的数字。 有关更多信息,请参见机器类型

依然以最开始的测试文件test.exe为例,我们看看Machine字段的内容是什么

已知偏移量0x3c处是签名信息的偏移量,我们看看签名信息的偏移量是多少

%title插图%num

如图签名信息的偏移量是0xe8,那么就可以知道0xe8开始处的4个字节是签名信息

%title插图%num

接着签名信息后面是IMAGE_FILE_HEADERS结构体,结构体第一个部分是Machine,占2个字节,那么我们看看0xe8+4处开始的2个字节的内容是什么

%title插图%num

内容是0x14c,0x14c代表是什么类型CPU呢?我们查看Machine Types,或者查看winnt.h头文件

%title插图%num

如图告诉我们0x14c表示的是Intel 386,说明机器类型是Intel 386的CPU。

NumberOfSections。该字段表示节的数量,占2字节。我们看test.exe文件的节的数量是多少

%title插图%num

0x4,说明节的数量是4个。

TimeDateStamp。日期时间戳,这个字段对应的是文件的创建时间,占4个字节。我们看看内容是什么

%title插图%num

0x4a7629e6,十进制是1249257958,转换成日期时间是2009-08-03 08:05:58,个人研究发现该值在pe文件最初产生时的确是表示文件创建时间,但该值可以修改,因此一旦发现右键属性里的文件创建时间与该值不一致也不必惊讶。

PointerToSymbolTable。符号表在文件中的偏移量,占4字节。微软官方文档的解释如下:

The file offset of the COFF symbol table, or zero if no COFF symbol table is present. This value should be zero for an image because COFF debugging information is deprecated.

COFF符号表在文件中的偏移量;如果不存在COFF符号表,则为零。 对于图像,此值应为零,因为不建议使用COFF调试信息。

我们看看我这里的test.exe该字段的内容是多少

%title插图%num

内容是0,说明不存在符号表。

NumberOfSymbols。符号数量,占4字节。微软官方文档的解释:

The number of entries in the symbol table. This data can be used to locate the string table, which immediately follows the symbol table. This value should be zero for an image because COFF debugging information is deprecated.

符号表中的条目数。 该数据可用于定位紧随符号表之后的字符串表。 对于image文件,此值应为零,因为不建议使用COFF调试信息。

我们看看我这里的test.exe该字段的内容是多少

%title插图%num

内容也是0,说明这是没有符号表的image可执行文件。

SizeOfOptionalHeader。可选头的大小,占2字节。微软官方文档的解释:

The size of the optional header, which is required for executable files but not for object files. This value should be zero for an object file. For a description of the header format, see Optional Header (Image Only).

可选头的大小,对于可执行文件是必需的,但对于目标文件不是必需的。 对于目标文件,该值应为零。 有关其头部格式的说明,请参见可选头(仅图像)

我们看看test.exe该字段内容是多少

%title插图%num

内容是0xe0,十进制是224,说明可选头的大小是224个字节。

Characteristics。特征标志,占2个字节,微软官方文档的解释:

The flags that indicate the attributes of the file. For specific flag values, see Characteristics.

指示文件属性的标志。 有关特定标志值,请参见特性

我们看看test.exe该字段内容是多少

%title插图%num

内容是0x10f,对应如下属性

%title插图%num

文件重定位信息被剥离、是个可执行文件、文件行数被剥离、本地符号被剥离和32位系统下的文件。

发表回复