计算PE文件中入口点的文件偏移量

Finding the Entry Point (EP) in memory and disk

有关于如何findexe文件中入口点的文件偏移量的信息。

在这里我可以读到

EP(File)= AddressOfEntryPoint – BaseOfCode + .text [PointerToRawData] + FileAlignment

然而,当我自己计算这个(我使用了几个不同的exe文件),我得出的结论是

入口点在EXE文件中的偏移量= AddressOfEntryPoint + .text [PointerToRawData] – .text [VirtualAddress]

从IMAGE_OPTIONAL_HEADER获取AddressOfEntryPoint,从IMAGE_SECTION_HEADER获取其他两个值。

该网页上的信息是否为假? 添加FileAlignment就像他们似乎错了,这是没有道理的。 还是呢? 文件alignment表明我应该使用模或其他来计算一个值。 如果BaseOfCode和FileAlignment是相同的值(主要是他们),它不会干扰将它们添加到计算,但它是如何有意义?

正确的,你根本不需要使用FileAlignment值。

算法应该如下所示(非常类似于你的):

  • 从IMAGE_OPTIONAL_HEADER.AddressOfEntryPoint(这是VA)获取AddressOfEntryPoint
  • 搜索此VA所在的部分标题(通常是第一个,但是您应该在所有部分标题中进行搜索)。
  • 一旦你有正确的部分头,得到它的VirtualAddressPointerToRawData领域。
  • AddressOfEntryPoint减去VirtualAddress :你现在有一个“增量”
  • 由于偏移量完全相同,因此:将“delta”添加到PointerToRawData

您不需要FileAlignment因为入口点所在的部分已经与该值对齐。