我已阅读Microsoft的文档pecoff_v83。在.reloc部分中,我已阅读:


修复表包含图像中所有修复程序的条目。可选标头中的总修复数据大小是修复表中的字节数。修复表分为多个修复块。每个块代表一个4K页面的修正。每个块必须在32位边界上开始。


我知道每个块都包含:页面RVA和块大小。每个块大小包含:类型和偏移量。

我用过peview



我有几个问题:


“每个块都必须在32位边界上开始”-我不明白,您能解释一下吗?
PE文件是否使用IMAGE_BASE_RELOCATION起作用?

从这个SO问题开始(“那么大多数二进制文件是由重定位表组成的吗?”):巨大的重定位表,因为有太多地方需要加载程序进行更新


加载程序如何使用重定位表并对其进行更新?



#1 楼


“每个块都必须在32位边界上开始”-我不明白,您能解释一下吗?

这意味着即使块完成后仍有空间,您也可以必须为您的RVA使用下一个32位对齐的地址。我认为这主要是因为页面优化。您可以阅读本文档以进一步了解。

PE文件是否使用IMAGE_BASE_RELOCATION起作用?

IMAGE_BASE_RELOCATION是一种数据结构,可以表示为: br /> PE文件不使用IMAGE_BASE_RELOCATION结构来工作,PE加载器(动态链接器)使用它来构造重定位表。如果您想了解更多有关重定位表的信息,可以阅读本主题。表格,因为加载程序必须更新的地方太多。
加载程序如何使用重定位表并更新它? .reloc部分中的重定位信息。本节包含有关基本重定位的信息,这意味着如果无法加载所需文件的首选地址(因为已经有映射到该文件)的指令或变量随该信息进行重定位。重新定位,这是调整地址的另一种方式。