一、前言
二、PE整体结构
三、DOS头
四、NT头
五、区段头
六、导出表
七、导入表
八、资源表
九、重定位表
1.概念
重定位表 存的是PE文件中需要修改(变量数据)的地址的位置。
全局变量和局部静态变量在PE文件数据段中。
程序代码在寻址这些变量时,用的不是偏移RVA,而是直接地址VA。
2.使用规则
我们知道VA=基址+RVA,而基址默认是0x400000,实际可能会发生变化。
所以在每次加载程序时,需要先判断程序加载基址是否是0x400000,如果是,重定位表内容不需要变动,如果不是,重定位表中的地址数据=原数据-原基址+新基址。
3.表结构
重定位表也是一个结构体数组,以全零元素节为,每一个数组元素描述了一页(4KB)内的重定位信息。
typedef struct _IMAGE_BASE_RELOCATION {
DWORD VirtualAddress; // 需要重定位的区域的位置RVA
DWORD SizeOfBlock; // 结构体大小,包含TypeOffset