【PE结构】重定位表

本文详细介绍了PE文件中的重定位表,包括其概念、使用规则、表结构和定位方法。重定位表用于记录PE文件中需要修正的地址位置,以适应不同的加载基址。在程序加载时,根据加载基址变化对表中的地址数据进行调整,确保程序正常运行。重定位表是一个结构体数组,每个元素描述4KB区域内重定位信息,包含起始RVA、大小和重定位元素个数等关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言
二、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
    //  WORD    TypeOffset[1];  // 存放相对于VirtualAddress的偏移
} IMAGE_BASE_RELOCATION;
  • VirtualA
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值