第2天:《加密与解密》-PE文件格式(一)

先看看PE文件格式的大致布局:

第2天:《加密与解密》-PE文件格式(一)

基本概念

PE文件使用的是一个平面地址空间,所有代码和数据都合并在一起,组成一个很大的结构。

基地址

PE文件载入内存后,会映射文件内存,出事内存地址称为基地址。不能被映射的数据被放在文件的尾部。

第2天:《加密与解密》-PE文件格式(一)

一般,EXE文件的基地址为400000h,DLL文件的基地址为10000000h

虚拟地址

PE文件被映射到内存中,每个程序有自己的虚拟空间,这个虚拟空间内存地址称为虚拟地址(VA)。

相对虚拟地址

RVA是内存中的一个简单的、相对于PE文件载入地址的偏移位置,它是一个“相对”地址(偏移量)。

VA 和 RVA的转换关系:

第2天:《加密与解密》-PE文件格式(一)

文件偏移地址

文件存储在磁盘时,数据位置相对文件头的偏移量。

MS-DOS头部

IMAGE_DOS_HEADER结构体如下:

第2天:《加密与解密》-PE文件格式(一)

e_magic和e_lfanew比较重要。前者值为5A4Dh。后者是真正的PE文件头的RVA,指出真正的PE头的文件偏移位置。

PE文件头

第2天:《加密与解密》-PE文件格式(一)

IMAGE_NT_HEADER结构体如下:

第2天:《加密与解密》-PE文件格式(一)

第2天:《加密与解密》-PE文件格式(一)

Signature字段

第2天:《加密与解密》-PE文件格式(一)

IMAGE_FILE_HEADER结构

包含了PE文件的一些基本信息。(注释的偏移量是基于PE文件头)

第2天:《加密与解密》-PE文件格式(一)

第2天:《加密与解密》-PE文件格式(一)

IMAGE_OPTIONAL_HEADER结构

32位结构(偏移量是相对PE文件头的)

第2天:《加密与解密》-PE文件格式(一)

第2天:《加密与解密》-PE文件格式(一)

64位结构:

第2天:《加密与解密》-PE文件格式(一)

第2天:《加密与解密》-PE文件格式(一)

第2天:《加密与解密》-PE文件格式(一)

magic字段:PE32是010Bh,PE32+是020Bh。

IMAGE_DATA_DIRECTORY结构如下:

第2天:《加密与解密》-PE文件格式(一)

第2天:《加密与解密》-PE文件格式(一)

PE文件在定位输出表。输入表和资源等重要数据时,就是从IMAGE_DATA_DIRECTORY结构开始的。