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;
1.Machine 每个CPU都有唯一的Machine码,用来指定文件的运行平台
#define IMAGE_FILE_MACHINE_UNKNOWN 0
#define IMAGE_FILE_MACHINE_I386 0x014c // Intel 386.
#define IMAGE_FILE_MACHINE_R3000 0x0162 // MIPS little-endian, 0x160 big-endian
#define IMAGE_FILE_MACHINE_R4000 0x0166 // MIPS little-endian
#define IMAGE_FILE_MACHINE_R10000 0x0168 // MIPS little-endian
#define IMAGE_FILE_MACHINE_WCEMIPSV2 0x0169 // MIPS little-endian WCE v2
#define IMAGE_FILE_MACHINE_ALPHA 0x0184 // Alpha_AXP
#define IMAGE_FILE_MACHINE_SH3 0x01a2 // SH3 little-endian
#define IMAGE_FILE_MACHINE_SH3DSP 0x01a3
#define IMAGE_FILE_MACHINE_SH3E 0x01a4 // SH3E little-endian
#define IMAGE_FILE_MACHINE_SH4 0x01a6 // SH4 little-endian
#define IMAGE_FILE_MACHINE_SH5 0x01a8 // SH5
#define IMAGE_FILE_MACHINE_ARM 0x01c0 // ARM Little-Endian
#define IMAGE_FILE_MACHINE_THUMB 0x01c2
#define IMAGE_FILE_MACHINE_AM33 0x01d3
#define IMAGE_FILE_MACHINE_POWERPC 0x01F0 // IBM PowerPC Little-Endian
#define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1
#define IMAGE_FILE_MACHINE_IA64 0x0200 // Intel 64
#define IMAGE_FILE_MACHINE_MIPS16 0x0266 // MIPS
#define IMAGE_FILE_MACHINE_ALPHA64 0x0284 // ALPHA64
#define IMAGE_FILE_MACHINE_MIPSFPU 0x0366 // MIPS
#define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466 // MIPS
#define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64
#define IMAGE_FILE_MACHINE_TRICORE 0x0520 // Infineon
#define IMAGE_FILE_MACHINE_CEF 0x0CEF
#define IMAGE_FILE_MACHINE_EBC 0x0EBC // EFI Byte Code
#define IMAGE_FILE_MACHINE_AMD64 0x8664 // AMD64 (K8)
#define IMAGE_FILE_MACHINE_M32R 0x9041 // M32R little-endian
#define IMAGE_FILE_MACHINE_CEE 0xC0EE
2.NumberOfSections 节区的数量 当定义的节区与实际节区不同时,将发生运行错误。
3.TimeDateStamp 编译器创建此文件的时间,它的数值是从1969年12月31日下午4:00开始到创建时间为止的总秒数
4. SizeOfOptionalHeader 可选头的长度 32位是 E0h 64位是F0h
5. 属性标志字段,不同数据位定义了不同的文件属性,不同的定义将影响系统对文件的装入方式,可以是下面这些值按位相或。
#define IMAGE_FILE_RELOCS_STRIPPED 0x0001 // Relocation info stripped from file. 文件中不存在重定位信息
#define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002 // File is executable (i.e. no unresolved externel references). 文件是可执行的
#define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004 // Line nunbers stripped from file. 不存在行信息
#define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008 // Local symbols stripped from file. 不存在符号信息
#define IMAGE_FILE_AGGRESIVE_WS_TRIM 0x0010 // Agressively trim working set 调整工作集
#define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020 // App can handle >2gb addresses 应用程序可处理大于2GB的地址
#define IMAGE_FILE_BYTES_REVERSED_LO 0x0080 // Bytes of machine word are reversed. 小尾方式
#define IMAGE_FILE_32BIT_MACHINE 0x0100 // 32 bit word machine. 只在32位平台上运行
#define IMAGE_FILE_DEBUG_STRIPPED 0x0200 // Debugging info stripped from file in .DBG file 不包含调试信息
#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400 // If Image is on removable media, copy and run from the swap file. 不能从可移动盘运行
#define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800 // If Image is on Net, copy and run from the swap file. 不能从网络运行
#define IMAGE_FILE_SYSTEM 0x1000 // System File. 系统文件(如驱动程序),不能直接运行
#define IMAGE_FILE_DLL 0x2000 // File is a DLL. 这是一个DLL文件
#define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000 // File should only be run on a UP machine 文件不能在多处理器上计算机运行
#define IMAGE_FILE_BYTES_REVERSED_HI 0x8000 // Bytes of machine word are reversed. 大尾方式
可执行文件包含0002 DLL文件包含2000h
普通可执行PE文件 一般是010Fh,DLL文件210Eh