什么是"对齐",以及如何从一个对齐转换为另一个对齐?

wam*_*amp 4 alignment portable-executable

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

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

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

jov*_*eha 9

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

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

Section Alignment通常为4096字节,符合内存页面的大小.

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

  • 该部分.text将被舍入到文件的1024字节.
  • 该部分.text将在内存中向上舍入为4096字节.

请注意文件和内存中可能存在的冗余空间量.

我不确定你为什么要"从一个对齐转换到另一个对齐".你到达那里的食谱使这项运动的目标成为一个谜.如果您的目标是操纵PE文件,那么您需要考虑的是文件对齐.Windows加载程序在将内容输入内存时将处理Section Alignment的内容,因此您通常根本不需要考虑它.

你可以阅读更多关于PE 在这里.