.Net PE 文件中的入口点 RVA 是什么?

JGW*_*man 5 .net portable-executable

Microsoft关于 PE 可选标头标准字段中“入口点 RVA”字段的文档(第 25.2.3.1 节)指出该字段应为:

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

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

500*_*ror 2

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