回顾 IMAGE_NT_HEADERS 结构体
上篇文章介绍了 PE 标识符,它是 IMAGE_NT_HEADERS 中的第一个字段,而 IMAGE_NT_HEADERS 的第二个部分就是 IMAGE_FILE_HEADER,就是文件头。来回顾一下 IMAGE_NT_HEADERS 的结构体定义。
IMAGE_NT_HEADERS 结构体的定义如下:
typedef struct _IMAGE_NT_HEADERS64 {
DWORD Signature;
IMAGE_FILE_HEADER FileHeader;
IMAGE_OPTIONAL_HEADER64 OptionalHeader;
} IMAGE_NT_HEADERS64, *PIMAGE_NT_HEADERS64;
typedef struct _IMAGE_NT_HEADERS {
DWORD Signature;
IMAGE_FILE_HEADER FileHeader;
IMAGE_OPTIONAL_HEADER32 OptionalHeader;
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
#ifdef _WIN64
typedef IMAGE_NT_HEADERS64 IMAGE_NT_HEADERS;
typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS;
#else
typedef IMAGE_NT_HEADERS32 IMAGE_NT_HEADERS;
typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS;
#endif
从上面的 IMAGE_NT_HEADERS 结构体得到,Signature 是上篇文章讨论的 PE 标识符,IMAGE_FILE_HEADER 就是本篇文章讨论的 文件头。
文件头的定义
来看一下文件头的定义,其定义在 winnt.h 中如下:
//
// File header format.
//
typedef struct _IMAGE_FILE_HEADER {
WORD Machine;
WORD NumberOfSections;
DWORD TimeDateStamp;
DWORD PointerToSymbolTable;
DWORD NumberOfSymbols;
WORD SizeOfOptionalHeader;
WORD Characteristics;
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
#define IMAGE_SIZEOF_FILE_HEADER 20
IMAGE_FILE_HEADER 结构体的大小为 20 个字节。
文件头主要定义了该文件运行的平台,文件的属性,节区的数量和可选头的大小等。
其他的字段,在下篇文章中具体介绍吧。
微信中搜索 “码农UP2U” 关注我的公众号吧!!!