PE可选 header 标准字段(第25.2.3.1节)中“Entry Point RVA”字段的Microsoft's documentation指出该字段应为:

入口点的RVA,需要指向字节0xFF 0x25,后跟标记为EXE的执行/读取部分或DLL的0部分中的RVA

这是什么意思?我检查了由C#编译器生成的PE文件,发现指向所描述字节0xFF 0x25的RVA,但接下来的四个字节为0x00402000,超出了相对虚拟内存的范围,不是我可以告诉的有效RVA 。我知道有一个重定位(第25.3.2节)指向类型为“IMAGE_REL_BASED_HIGHLOW”的该值,但是我也不知道这意味着什么。我也了解应该按第25.3.1节中所述调用mscoree.dll的“_CorExeMain”(我正在使用可执行文件),但我不知道如何。

最佳答案

0xFF 0x25字节编码一条跳转双字ptr指令。 (在这种情况下)0x402000值是任何.NET exe导入的一个本机函数(即来自mscoree.dll的_CorExeMain)在导入地址表(IAT)中的偏移量。当然,跳转到该地址将启动该过程的CLR。

09-26 12:22