以下是将节对齐转换为文件对齐的步骤:
- 查找数据的 RVA
- 从 RVA 中得出所引用数据所属的部分。这是微不足道的,因为部分不重叠。各个部分的起始地址在文件头中可用
- 找到 RVA 和节的起始地址之间的差异,以找到数据偏移量,即该数据在节内的偏移量。
- 从文件头中,对于同一节,找到同一节在文件中的位置。
- 将数据偏移量添加到文件中节的位置,以找到文件中数据的地址。
但我就是不明白,有人可以详细说明一下吗?
以下是将节对齐转换为文件对齐的步骤:
但我就是不明白,有人可以详细说明一下吗?
对齐是一个向上取整的值。部分数据大小被四舍五入以提高效率,因为操作系统无论如何都会以块的形式移动内容。
文件对齐通常是 512 字节,适合大多数文件系统的块大小。
Section Alignment 通常是 4096 字节,适合内存页的大小。
因此,如果您有一个 PE 文件,其部分(如“ .text
”)包含513个字节的数据:
.text
将四舍五入到1024字节。.text
将在内存中四舍五入到4096字节。请注意文件和内存中可能存在的松弛空间量。
我不确定您为什么要“从一种对齐方式转换为另一种对齐方式”。你得到的食谱使练习的目标成为一个谜。如果您的目标是操作 PE 文件,那么您只需要考虑文件对齐。Windows 加载程序会在将 Section Alignment 内容放入内存时对其进行处理,因此您通常根本不需要考虑这一点。
您可以在此处阅读有关 PE的更多信息。