【问题标题】:What is "alignment", and how to convert from one alignment to another?什么是“对齐”,以及如何从一种对齐方式转换为另一种?
【发布时间】:2010-09-22 11:23:14
【问题描述】:

以下是从节对齐转换为文件对齐的步骤:

  1. 查找数据的 RVA
  2. 从 RVA 派生引用的数据所属的部分。这是微不足道的,因为部分不重叠。各个部分的起始地址可在文件头中找到
  3. 查找 RVA 和节的起始地址之间的差异以查找数据偏移量,即该数据在节内的偏移量。
  4. 从文件头,对于同一个节,找到同一个节在文件中的位置。
  5. 将数据偏移量添加到文件中section的位置,即可找到文件中数据的地址。

但我就是不明白,谁能详细说明一下?

【问题讨论】:

    标签: alignment portable-executable


    【解决方案1】:

    对齐是一个向上取整的值。部分数据大小被四舍五入以提高效率,因为操作系统无论如何都会以块的形式移动内容。

    文件对齐通常为 512 字节,适合大多数文件系统的块大小。

    Section Alignment 通常为 4096 字节,适合内存页的大小。

    因此,如果您的 PE 文件的部分(如“.text”)包含 513 个字节的数据:

    • .text 部分将在文件中向上舍入到 1024 个字节。
    • .text 部分将在内存中四舍五入到 4096 个字节。

    请注意文件和内存中可能存在的松弛空间量。

    我不确定您为什么要“从一种对齐方式转换为另一种对齐方式”。你得到的食谱使练习的目标成为一个谜。如果您的目标是操作 PE 文件,那么您只需要考虑文件对齐。 Windows 加载程序会在将 Section Alignment 放入内存时对其进行处理,因此您通常根本不需要考虑这一点。

    您可以阅读更多关于 PE here.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-27
      • 2021-06-20
      • 2011-07-28
      • 2018-01-16
      • 2012-05-25
      • 2021-04-23
      相关资源
      最近更新 更多