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

And*_*dén 6 windows assembly portable-executable

http://en.redinskala.com/finding-the-ep/

有关于如何在exe文件中查找入口点的文件偏移量的信息.

在这里我可以读到这一点

EP(文件)= AddressOfEntryPoint - BaseOfCode + .text [PointerToRawData] + FileAlignment

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

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

从IMAGE_OPTIONAL_HEADER获取AddressOfEntryPoint的位置和IMAGE_SECTION_HEADER中的其他两个值.

该网页上的信息是否为假?像它们一样添加FileAlignment似乎是错误的,它没有意义.或者是吗?文件对齐表明我应该使用modulo或其他东西来计算值.如果BaseOfCode和FileAlignment是相同的值(主要是它们),它不会干扰将它们添加到计算中,但它有什么意义呢?

Nei*_*tsa 5

正确,您根本不需要使用该FileAlignment值。

该算法应该如下所示(与您的非常相似):

  • AddressOfEntryPoint从 IMAGE_OPTIONAL_HEADER.AddressOfEntryPoint获取(这是一个 VA)
  • 搜索此 VA 所在的部分标题(通常是第一个,但您应该真正搜索所有部分标题)。
  • 获得正确的部分标题后,获取其VirtualAddressPointerToRawData字段。
  • 减去VirtualAddress来自AddressOfEntryPoint:你现在有一个“增量”
  • 由于完全相同的增量适用于偏移量,因此:将“增量”添加到PointerToRawData.

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