| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2424 人关注过本帖
标题:罗云彬WIN32重定位代码中的奇怪字符
只看楼主 加入收藏
hb0zyj
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-04-30 13:18
你们都要疼我哦
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:火星
等 级:贵宾
威 望:49
帖 子:1296
专家分:2746
注 册:2008-7-13
收藏
得分:8 
唉 事实证明 偶还是挺有耐心的。

首先你要理解 为什么吃饱了撑的要用这3句代码组合?这3句以后,对什么东西有影响了?这个你不自己分析清楚 是搞不明白的。

call @F            ;不管是按照默认载入还是载入其他地址,这个都没问题,自己会修正
@@:                ;这个标号也会自己按照实际载入地址修正
pop ebx            ;不管是默认的还是改变的,弹出的都是正确的返回地址,即实际标号地址
sub ebx,offset@B   ;你要搞清楚 offset这个取地址,是在什么时候完成的,它早就完成了,而且是按照代码设计时的默认装载地址取的,自己不会修正,即它取到的地址,是按照默认载入时标号的地址。而ebx呢,是实际的标号地址,不管默认还是改变过的,ebx中都是正确的。那么这样一sub,ebx中就是差值了。
如果整段代码都是按照设计时的默认载入地址装载的,那么差值为0。
如果改变载入地址,ebx就是差值,用这个差值去修正代码中其他需要重定位的变量。

整个来说,就是用@@的地址,来计算出默认载入和当前载入地址的差值,放在ebx中,
然后用这个差值 去修正代码中需要重定位的变量地址。 这其中又会牵扯到变量地址何时初始化的问题。。。

看你下面的回帖,想必还是不明白,如果明白,你就不会说什么ebx不会是0了。
按照默认地址装载,自然是0, 如果改变载入地址,当然不为0了。

还是要基础啊  基础啊  你要是还不明白,那就彻底无语了。

小妹,哥哥看你骨骼清奇,绝非凡人,将来必成大业,不如这样,你先把裤裤脱了,待哥哥为你开启灵窍,然后我们一起努力钻研如何
2010-04-30 15:29
chengstone
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
帖 子:562
专家分:226
注 册:2004-4-3
收藏
得分:0 
同意楼上说的 基础非常重要

qq:69558139
2010-04-30 15:50
快速回复:罗云彬WIN32重定位代码中的奇怪字符
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014604 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved