PE头字段说明

PE头

入口和代码开始不是一个概念

一个exe运行的时候需要借助其他的资源,也就是多个PE文件组成,每个pe文件都有自己的imagebase,为了保证主程序正常运行采用了,imagebase+OEP的方式定入口点

filebuffer在内存中与在硬盘里一模一样,buffer需要运行起来需要PE loader拉伸成windows系统遵守的格式

filebuffer拉伸成imagebuffer,通过PEloader加载

1、DOS头:
WORD e_magic “MZ标记”用于判断是否为可执行文件.
DWORD e_lfanew PE头相对于文件的偏移,用于定位PE文件
2、标准PE头:
WORD Machine; 程序运行的CPU型号:0x0任何处理器/0x14C386及后续处理
WORD NumberOfSections 文件中存在的节的总数,如果要新增节或者合并节就要修改这个值.
DWORD TimeDateStamp; 时间戳:文件的创建时间(和操作系统的创建时间无关)
DWORD PointerToSymbolTable;
DWORD NumberOfSymbols;
WORD SizeOfOptionalHeader 可选PE头的大小,32位PE文件默认E0h、64位PE文件默认为F0h、大小可以自定义.
WORD Characteristics; 每个位有不同的含义,可执行文件值为10F、即0、1、2、3、8位置
3、可选PE头:
WORD Magic 说明文件类型:10B、32位下的PE文件、20B64位下的PE文件
BYTE MajorLinkerVersion
BYTE MinorLinkerVersion
DWORD SizeOfCode 所有代码节的和,
DWORD SizeOfInitializedData; 已初始化数据大小的和
DWORD SizeOfUninitializedData; 未初始化数据大小的和
DWORD AddressOfEntryPoint 程序入口
DWORD BaseOfCode; 代码开始的基址,编译器填的
DWORD BaseOfData; 数据开始的基址,编译器填的
DWORD ImageBase 内存镜像基址
DWORD SectionAlignment; 内存对齐
DWORD FileAlignment; 文件对齐
WORD MajorOperatingSystemVersion;
WORD MinorOperatingSystemVersion;
WORD MajorImageVersion;
WORD MinorImageVersion;
WORD MajorSubsystemVersion;
WORD MinorSubsystemVersion;
DWORD Win32VersionValue;
DWORD SizeOfImage 内存中整个PE文件的映射的尺寸,可以比实际的值大
DWORD SizeOfHeaders 所有头+节表按照文件对齐后的大小
DWORD CheckSum; 校验和,一些系统文件有要求.用来判断文件是否被修改.
WORD Subsystem
WORD DllCharacteristics
DWORD SizeOfStackReserve 初始化时保留的堆栈大小
DWORD SizeOfStackCommit 初始化时实际提交的大小
DWORD SizeOfHeapReserve 初始化时保留的堆大小
DWORD SizeOfHeapCommit 初始化时实践提交的大小
DWORD LoaderFlags
DWORD NumberOfRvaAndSizes 目录项数目