基址重定位表

基址重定位表在PE文件加载到内存时起关键作用,处理因加载地址变化引起的硬编码地址问题。当PE文件不能加载到ImageBase指定地址时,通过查找并更新硬编码地址实现重定位。本文详细介绍了PE重定位的基本原理,基址重定位表的结构和分析方法,以Win7 notepad.exe为例展示了重定位过程。
摘要由CSDN通过智能技术生成

基址重定位表(Base Relocation Table),记录PE重定位时需要修改的硬编码地址的位置。

一般地,向进程的虚拟内存加载PE文件(EXE、DLL、SYS)时,文件会被加载到PE头的ImageBase所指的地址处。若加载的文件为DLL或SYS,且ImageBase位置加载了其他DLL或SYS文件时,则会进行PE重定位。

PE重定位是指PE文件无法加载到ImageBase所指位置时,而加载到其他地址所发生的一系列的处理行为。

因为在进程创建好之后,EXE文件会首先加载到内存中,因而EXE无须考虑重定位的问题。Windows Vista之后的版本引入ASLR机制,每次运行PE文件都会被加载到随机地址。

系统的DLL实际不会发生重定位,因为同一系统的kernel32.dll、user32.dll等会被加载到自身固有的ImageBase。

下面以Win7的notepad.exe程序为例,先使用PEView打开该程序查看ImageBase的值为01000000,再使用Ollydbg打开该程序查看。



可以看到,在EP代码中,方框中的地址是以硬编码的形式存在的。其中地址5810FC和581100是.text节区的IAT区域,地址58C0A4为.data节区的全局变量。每当在Ollydbg中重启notepad.exe程序,地址值就会随加载地址

页式地址重定位操作系统是一种常见的内存管理技术,通常用于将虚拟内存地址转换为物理内存地址。在这种系统中,内存被划分为大小相等的页框,而程序使用的内存也被划分为相同大小的页面。每个页面都有一个唯一的页号,而每个页号都映射到一个特定的页框。 当程序引用一个虚拟地址时,操作系统将虚拟地址分解为页号和页内偏移量,并将页号映射到相应的页框。然后,操作系统将页内偏移量添加到页框的物理地址中,从而获得物理地址。 但是,当操作系统将进程从一个物理地址空间移动到另一个物理地址空间时,所有的虚拟地址都必须被重新映射到新的物理地址。这个过程就被称为页重定位。 在页式地址重定位系统中,页存储在主存储器中,并通过页寄存器来访问。当一个程序引用一个虚拟地址时,处理器将虚拟地址中的页号发送到页寄存器,并获取与该页号相关联的页项。页项包括该页号所映射的物理页框号。然后,处理器将物理页框号与虚拟地址中的页内偏移量组合,从而计算出物理地址。 当操作系统需要将一个进程从一个地址空间移动到另一个地址空间时,页必须被更新,以便将旧的物理页框号映射到新的物理页框号。这个过程通常涉及到页基址寄存器和页长度寄存器的更新,以及所有虚拟地址的重新映射。 总之,页式地址重定位操作系统是一个基于分页内存管理的系统,它通过将虚拟地址映射到物理地址来管理内存。在这个系统中,页被用来存储虚拟页号和物理页框号之间的映射关系,并且在地址空间移动时需要进行重定位操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值