5

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

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

但我就是不明白,有人可以详细说明一下吗?

4

1 回答 1

9

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

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

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

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

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

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

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

您可以在此处阅读有关 PE的更多信息。

于 2010-09-22T03:15:40.900 回答