【问题标题】:Calculating the file offset of a entry point in a PE file计算PE文件中入口点的文件偏移量
【发布时间】:2016-02-16 21:32:48
【问题描述】:

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

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

这里我可以读到

EP(文件)= AddressOfEntryPoint – BaseOfCode + .text[PointerToRawData] + 文件对齐

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

EXE 文件入口点的偏移量 = AddressOfEntryPoint + .text[PointerToRawData] - .text[虚拟地址]

AddressOfEntryPoint 是从 IMAGE_OPTIONAL_HEADER 获取的,另外两个值是从 IMAGE_SECTION_HEADER 获取的。

那个网页上的信息是假的吗?像他们一样添加 FileAlignment 似乎是错误的,没有意义。或者是吗?文件对齐建议我应该使用模数或其他东西来计算值。如果 BaseOfCode 和 FileAlignment 是相同的值(大多数情况下它们是相同的),将它们添加到计算中不会干扰,但它有什么意义呢?

【问题讨论】:

  • 我不得不重新阅读 PE 规范,但添加文件对齐似乎确实是错误的。如果未对齐的偏移量是x,我会选择x - x % FileAlignment

标签: windows assembly portable-executable


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 2011-03-26
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    相关资源
    最近更新 更多