PE文件(portable executable)
大致结构
1.DOS文件头 64byte
其中最重要的是: e_magic 表示MS-DOS文件头的签名
e_lfanew 指出 image_nt_header在映像中的位置
2.DOS stub程序 128byte
运行在DOS下的16位程序,目的是指出当windows程序在dos下运行时,显示信息表明该程序不能
在dos下执行并终止执行
3.NT文件头
PE文件的核心部分,被定义为s64和s32两个版本
其中包含有三个部分包括一个‘PE’字样的签名,PE文件头(IMAGE_FILE_HEADER),和PE可选头(IMAGE_OPTIONAL_HEADER32)
(1)Signature:类似于DOS头中的e_magic,其高16位是0,低16是0x4550,用字符表示是'PE‘。
(2)IMAGE_FILE_HEADER
- 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;
Machine:该文件的运行平台,是x86、x64还是I64等等
NumberOfSections:该PE文件中有多少个节,也就是节表中的项数。
TimeDateStamp:PE文件的创建时间,一般有连接器填写。
PointerToSymbolTable:COFF文件符号表在文件中的偏移。
NumberOfSymbols:符号表的数量。
SizeOfOptionalHeader:紧随其后的可选头的大小。
Characteristics:可执行文件的属性,可以是下面这些值按位相或。
(3)IMAGE_OPTIONAL_HEADER
- typedef struct _IMAGE_OPTIONAL_HEADER {
- WORD Magic;
- BYTE MajorLinkerVersion;