标准PE头属性
PE头结构体
typedef struct _IMAGE_NT_HEADERS {
DWORD Signature; //PE头标识
IMAGE_FILE_HEADER FileHeader; //标准PE头
IMAGE_OPTIONAL_HEADER32 OptionalHeader; //扩展PE头
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
PE标准结构体
typedef struct _IMAGE_FILE_HEADER {
WORD Machine; //表示可以运行在什么样的CPU上 任意:0 ,Intel386及后续:14C ,x64:8664
WORD NumberOfSections; //表示节的数量
DWORD TimeDateStamp; //编译器填写的时间戳
DWORD PointerToSymbolTable; //调试相关
DWORD NumberOfSymbols; //调试相关
WORD SizeOfOptionalHeader; //可选PE头的大小(32位PE文件:0xE0 , 64位PE文件:0xF0)
WORD Characteristics; //文件属性
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
WORD Characteristics 成员里值的含义 (文件属性)
#define IMAGE_FILE_RELOCS_STRIPPED 0 // 文件中不存在重定位信息
#define IMAGE_FILE_EXECUTABLE_IMAGE 1 // 文件是可执行的
#define IMAGE_FILE_LINE_NUMS_STRIPPED 2 // 不存在行信息
#define IMAGE_FILE_LOCAL_SYMS_STRIPPED 3 // 不存在符号信息
#define IMAGE_FILE_AGGRESIVE_WS_TRIM 4 // 调整工作表
#define IMAGE_FILE_LARGE_ADDRESS_AWARE 5 // 应用程序可处理大于2GB的地址
6 // 此标志保留
#define IMAGE_FILE_BYTES_REVERSED_LO 7 // 小尾方式
#define IMAGE_FILE_32BIT_MACHINE 8 // 只在32位平台上运行
#define IMAGE_FILE_DEBUG_STRIPPED 9 // 不包含调试信息
#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 10 // 不能从可移动盘运行
#define IMAGE_FILE_NET_RUN_FROM_SWAP 11 // 不能从网络运行
#define IMAGE_FILE_SYSTEM 12 // 系统文件(如驱动程序),不能直接运行
#define IMAGE_FILE_DLL 13 // 这是一个DLL文件
#define IMAGE_FILE_UP_SYSTEM_ONLY 14 // 文件不能在多处理器计算机上运行
#define IMAGE_FILE_BYTES_REVERSED_HI 15 // 大尾方式
当文件属性为:010E
0000 0001 0000 1110 (转为二进制对应每一个位)
第一位为0
第二位为1表示:该文件是可执行的
第三位为1表示:不存在行信息
第四位为1表示:不存在符号信息
…
第九位为1表示:只能在32位平台上运行
…