连载12:文件头 —— IMAGE_FILE_HEADER

回顾 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” 关注我的公众号吧!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容