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

.Net PE文件中的RVA入口点是什么?,.net,portable-executable,.net,Portable Executable,对于PE可选标题标准字段(第25.2.3.1节)中的“入口点RVA”字段,该字段应为: 入口点的RVA需要指向字节0xFF 0x25,后跟标记为execute/read的部分中的RVA(对于EXE)或标记为0(对于DLL) 这是什么意思?我检查了c#编译器生成的一个PE文件,发现一个RVA指向所描述的字节0xFF 0x25,但接下来的四个字节是0x00402000,超出了相对虚拟内存的范围,并不是一个有效的RVA。我知道有一个重定位(第25.3.2节)指向该值,类型为“IMAGE\u REL\u

对于PE可选标题标准字段(第25.2.3.1节)中的“入口点RVA”字段,该字段应为:

入口点的RVA需要指向字节0xFF 0x25,后跟标记为execute/read的部分中的RVA(对于EXE)或标记为0(对于DLL)


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

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

实际上,这有点误导。0x402000不是偏移量,它是指向_CorExeMain的指针的绝对地址。