PE结构->【基址重定位】

本文详细解析了Windows程序中基址重定位的概念,包括为什么需要重定位、哪些指令需要重定位以及重定位所需的信息。通过实例分析了重定位表中的内容和结构,帮助读者理解这一关键的PE格式特性。

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

在这里再次强调一下,只要是windows操作程序,其就要遵循PE格式,再说人家看雪的网址就是www.pediy.com。

这一节对于讲来研究病毒原理的研究影响比较大,大家务必要深入理解~

但是吧,咱的权威教材看雪的《加密与解密》在这一节的讲解上实在不给力,很多初学者看得云里雾里的。大家意见一致啵 ?!

问题一:什么是基址重定位?

答:
重定位就是你本来这个程序理论上要占据这个地址,但是由于某种原因,这个地址现在不能让你霸占,你必须转移到别的地址,这就需要基址重定位。
打个比方:例如你现在计划在某某地方建一栋楼,但是有一天你收到上边的通知,这个地方政府临时要征用建公厕,所以这时候你就没辙,得去别的地方建啦~

问题二:为什么需要基址重定位?

答:
其实这个问题看起来跟前边的有点重复不是?
但是有些朋友可能会这么说,你的言论是可以,但是放在程序中,你上节课不是还说每个程序都让Windows 欺骗了吗 —— 每个程序觉得自己都完全占有 4GB的内存空间,何来地址被别的程序占据了呢?!

首先,能够提出问题的朋友都是值得表扬和鼓励的
但是,上节课我们谈了什么内容呢 ? 谈了导出表,为什么会出现导出表呢 ? 正是因为有DLL 这类破坏别人家庭幸福的“小三”的存在~
我们之前谈过,动态链接库它自己是没有占据任何私有空间的,都是寄生在应用程序的私有空间里边。那寄生在别人家里,睡在哪里就肯定不是
小三说了算啦,肯定要由主人决定不是?
所以,在小三的眼里,不用说,肯定永远都睡在大房,但客观事实告诉我们,小三只能住卧室~(有点扯远了,基址重定位就是这么被需求的^_^)

问题三:我们需要对程序中的哪些语句(指令)进行基址重定位呢?
答:请先看下图

这里写图片描述

这是上节课我们用到的动态链接库 Counter.dll 文件,对其用W32Dasm 进行反汇编的截图。
我们分析下,有哪些语句是需要我们来进行基址重定位的呢 ?
(温馨提示:以下内容涉及一些汇编基础和windows基础,不懂的朋友可以参照视频教程。因为一般说话比打字容易,信息量也比较大~)

答案是 —— 但凡涉及到直接寻址的指令都需要进行重定位处理!(那什么是直接寻址? 咱在零基础入门学习汇编里边讲得很清楚啦,只要在机器码中看到有地址的,那就叫直接寻址……那有没有间接的? 肯定哈,间接的就是地址被间接的保存起来,例如存放在寄存器eax, 然后通过访问寄存器来获取地址,那就叫间接~)

那么我们再过头来看下图片,一眼就能扫出以下指令需要对其进行重定位:

:10001026 FF0500300010   inc  dword ptr [10003000]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值