PE文件格式

发布时间 2023-05-03 22:45:45作者: 一点点高手

PE文件格式

VA是进程虚拟内存的绝对地址,RVA+ImageBase=VA

PE头

DOS头 _IMAGE_DOS_HEADER

e_magic :DOS 签名(4D5A)

e_lfanew: 指示NT头的偏移(NT头为_IMAGE_NT_HEADERS)

NT头

Signature:签名为00

File Header:文件头

Optional Header:可选头

文件头 _IMAGE_FILE_HEADER

machine很重要

NumberOfSections 用来指出文件中的存在的节区数量,该值一定要大于0

SizeOfOptionalHeader 用来指出IMAGE_OPTIONAL_HEADER32结构体的长度,PE装载器需要看这个数据来识别出结构体大小

Characteristics 用来表示文件的属性,文件是否可以运行等形态,是否为DLL文件等属性。

可选头 _IMAGE_OPTIONAL_HEADER32

Magic: 区分是 _IMAGE_OPTIONAL_HEADER32还是 _IMAGE_OPTIONAL_HEADER644

AddressOfEntryPoint: 持有EP的RVA值,指出程序最先执行的代码起始位置。

ImageBase:指出文件的优先装入地址,PE装载器先创建进程,再将文件载入内存里,然后把EIP寄存器的值设置为ImageBase+AddressOfEntryPoint

SectionAlignment,FileAlignment 后者指定了节区在磁盘文件中的最小单位,前者则指定了节区在内存里的最小单位

SizeOfImage:加载PE文件到内存后,SizeOfImage指定了PE Image在虚拟内存所占空间的大小。

SizeOfHeader: 指出了整个PE头的大小,第一节区所在的位置和SizeOfHeader距文件开始偏移的量相同。

NumberOfRvaAndSizes:用来指DataDirectory(IMAGE_OPTIONAL_HEADER32最后一个成员)数组的个数

DataDirectory: 是由IMAGE_DATA_DIRECTORY结构体组成的数组

节区头 IMAGE_SECTION_HEADER

img

Characteristics:这个属性规定了可写(读)等属性。

RVA to RAW

img

img

IAT

IMAGE_IMPORT_DESCRIPTOR

OriginalFirstThunk: INT的地址(RVA)

Name:库名称字符串的地址

FirstThunk: IAT的地址(RVA)

INT中各元素的值为IMAGE_IMPORT_BY_NAME结构体指针

img

img
INT(IMAGE_IMPORT_BY_NAME)