typedef struct _IMAGE_FILE_HEADER {
USHORT Machine;//运行平台
USHORT NumberOfSections;//区段数量
ULONG TimeDateStamp;//文件创建时间
ULONG PointerToSymbolTable;//符号表指针
ULONG NumberOfSymbols;//符号表数量
USHORT SizeOfOptionalHeader;//扩展头大小
USHORT Characteristics;//文件属性
}IMAGE_FILE_HEADER,*PIMAGE_FILE_HEADER;
结构体的第一个成员说明CPU的类型。需要了解的话看win32 sdk的宏定义。
结构体的第三个成员使用的是格林尼治时间(GMT)计算的秒数。
结构体最后一个成员说明这个PE文件的属性,EXE文件是0x010f,DLL文件是0x0210。常用的属性有:
- 0x0002,IMAGE_FILE_EXECUTABLE_IMAGE,文件可执行
- 0x0004,IMAGE_FILE_LINE_NUMS_STRIPPED,不包含行号信息
- 0x0100,IMAGE_FILE_32BIT_MACHINE,运行于32位平台
- 0x0400,IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP,如果文件在可移动存储介质里,则复制到交换区运行
- 0x0800,IMAGE_FILE_NET_RUN_FROM_SWAP,如果文件在网络存储介质里,则复制到交换区中运行
- 0x1000,IMAGE_FILE_SYSTEM,系统文件
- 0x2000,IMAGE_FILE_DLL,DLL文件