【问题标题】:Does the PointerToRawData entries within section headers in a PE file hold offsets in ascending order?PE 文件中节标题中的 PointerToRawData 条目是否按升序保存偏移量?
【发布时间】:2016-08-19 17:10:56
【问题描述】:

PE 文件的节头中的PointerToRawData 条目是否按升序保存偏移量?

我可以假设 PE 文件中的节标题的PointerToRawData 条目相对于它们在节表中的顺序按升序保存偏移量吗?

我看到文档说:

在图像文件中,节的 VA 必须由链接器分配 使它们按升序排列且相邻,并且它们必须是 可选标头中SectionAlignment 值的倍数。

但是,我找不到有关PointerToRawData 成员的任何信息?

如果可能,请提供信息来源。

谢谢。

【问题讨论】:

    标签: windows assembly x86 windows-10 portable-executable


    【解决方案1】:

    是的,节数据,即 PointerToRawData 值所指向的内容,需要与节标题的顺序相同,正如您所指出的那样,它们需要按 VA 顺序排列。

    根据 Microsoft 可移植可执行和通用对象文件格式规范 - 修订版 8.3 - 2013 年 2 月 6 日:

    部分数据

    [...] 部分数据必须按顺序出现 相应部分的 RVA 值(与中的各个部分标题一样) 节表)。

    如果 SectionAlignment 值在 可选标头小于体系结构的页面大小。对于此类文件, 文件中节数据的位置必须与其在内存中的位置相匹配,当 图像被加载,因此节数据的物理偏移量与 RVA 相同。

    【讨论】:

      【解决方案2】:

      在节表中,节头的VirtualAddressPointerToRawData字段都必须是升序,​​即第一个节头持有最低的VirtualAddressPointerToRawData

      我猜微软做出这个决定是为了加快加载过程。

      官方 PE 文档在名为“Section Data”的部分中说:

      在图像文件中,部分数据必须在边界上对齐 由可选标头中的FileAlignment 字段指定。部分 数据必须按照相应的 RVA 值的顺序出现 节(节表中的各个节标题也是如此)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-26
        • 1970-01-01
        相关资源
        最近更新 更多