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部分中的重定位信息。本节包含有关基本重定位的信息,这意味着如果无法加载所需文件的首选地址(因为已经有映射到该文件)的指令或变量随该信息进行重定位。重新定位,这是调整地址的另一种方式。