返回目录 小结 讨论过托管映像文件的结构以及IL编译器生成这些文件的方式,我将小结一下IL编译器创建一个托管PE文件的步骤。PE文件的创建表现为以下4个步骤: 步骤1:初始化 1. 初始化内部缓冲器 2. 在内存创建一个PE文件的空模板,包括MS-DOS头和stub、PE签名、COFF头和PE头。 3. 输入地址表和CLR头被分配在.text区段中。 步... Read More
返回目录 重定位区段 映像文件的.reloc区段包括了Fixup表,它为映像文件中的所有修正保存了入口。RVA和.reloc区段的大小都由PE头的Base Relocation表目录定义。Fixup表由很多块修正组成,每一块将这些修正保存为一个4KB的页。这些块都是按4字节排列的。 每一个修正都描述了映像文件中特定地址的位置,以及当加载这个映像文件到内存的时候,OS加载器应该如何修改这个位置上... Read More
返回目录 CLR头 PE头的第15个目录入口包括了RVA和映像文件中的CLR头的大小。这个CLR头,包括了所有特定于CLR的数据入口和其他的信息,应该位于这个映像文件中的一段只读区段。IL编译器将CLR头放在了.text区段。 头的结构 CLR头定义在CorHdr.h中——一个头文件被分配为Microsoft .NET Framework SDK的一部分,如下: Code highlig... Read More