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

时间:2015-11-15 19:56:45

标签: 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是相同的值(主要是它们),它不会干扰将它们添加到计算中,但它有什么意义呢?

1 个答案:

答案 0 :(得分:2)

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

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

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

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