书本上最开头,说到本章不仅会有PE文件格式的知识,还有进程、内存、DLL的相关内容。
pe文件是指windows操作系统下使用的可执行文件格式。
pe文件包括:
种类 | 主扩展名 |
---|---|
可执行文件 | EXE、SCR |
库系列 | DLL、OCX、CPL、DRV |
驱动程序 | SYS、VXD |
对象文件系列 | OBJ |
VA=进程虚拟内存的绝对地址。
RVA(Relative Virtual Address)=相对虚拟地址,是指从某个基准位置(ImageBase)开始的相对位置。
VA=RVA+ImageBase
这是一个结构体,其中最重要的是两个:
e_magic:DOS签名(4D 5A=>ascii“MZ”)
e_lfanew:指示NT头的偏移
所有PE文件在开始部分都会有DOS签名(“MZ”)
NT头第一个成员也是签名:50450000H(“PE”00)
NT文件头中有四个重要的:
每个CPU都有唯一的Machine码。
用于指出文件中存在的节区数量。
用来指出IMAGE_OPTIONAL_HEADER32结构体的长度。
用于标识文件的属性,文件是否是可运行的状态、是否是DLL文件等信息。
NT可选头以下的较为重要:
当位32结构体时,Magic为18B,当位64结构体时,Magic为20B.
持有EP的RVA值,该值值出程序最先执行的代码起始地址。
它指出文件优先装入地址。
PE 文件的Body部分划分为若干节区,用于存放不同类别的数据。
PE文件加载到内存时,它制定了PE Image再虚拟内存中所占空间大小
用来指出整个PE头的大小。
用来区分系统驱动文件和普通可执行文件。
用来指定datadirectory
由IMAGE_DATA_DIRECTORY结构体组成的数组。
节选头中定义了各个节区的属性,比如我们前面提到的.code、.data、.res。
RAW = TVA - VirtualAddress + PointerToRawData
IAT就是导入表
动态链接库
原文:https://www.cnblogs.com/lex-shoukaku/p/13306341.html