AddressOfEntryPoint 超出文件末尾

AddressOfEntryPoint is beyond the end of the file

我正在尝试了解 COFF header 中的 AddressOfEntryPoint 是什么。

我有一个 "nothing" .NET exe:

class Program
{
    public static void Main()
    {
    }
}

(我将其编译为 x86 应用程序)

我在 COFF header 中为标准字段获得的值是:

COFF - Optional Header Standard Fields
======================================

UInt16    Magic                         0x0000010B
Byte      MajorLinkerVersion            0x30
Byte      MinorLinkerVersion            0x0
UInt32    SizeOfCode                    0x0400
UInt32    SizeOfInitializedData         0x0800
UInt32    SizeOfUninitializedData       0x0000
UInt32    AddressOfEntryPoint           0x2356
UInt32    BaseOfCode                    2000
UInt32    BaseOfData                    4000

AddressOfEntryPoint0x2356

文件的长度不足以让这个值成为任何地方的偏移量,那它是什么?

(文件位于:https://drive.google.com/open?id=1VClORkJKyGhd7o3YBPbCZEni1ad_mncl

为了计算 EntryPoint 在文件中的偏移量,您需要从 .text 部分中减去 BaseOfCode,同时添加 PointerToRawData。对于这个文件,最后一个是 0x200 并且根据之前的计算它给出 0x556 指向一个很好的 jmp_CorExeMain.