自重定位解析:

http://bbs.pediy.com/archive/index.php?t-136922.html

自重定位解析:

假设代码如下:
varA dword 01234567
call @F
@@:
pop ebx
sub ebx,offset @B
mov eax,[ebx+varA]


1.如编译时预定的加载地址为0040c000
00400000 01234567
0040c004 E800000000 call 0040c009 ;这是相对跳了0字节,相当于push eip
0040c009 5B pop ebx ;这里ebx就是动态的eip了
0040c00A 81EB09104000 sub ebx,0040c009 ;这里会固定为0040c009
那么sub ebx,0040c009 ;如果加载地址是0040c000,相对基址
ebx就是0


2.当我们把这段代码加载到目标进程的0080c000(shellcode注入或线程注入的情况)。
00800000 01234567 ;加载地址变了
0080c004 E800000000 call 0080c009;代码没有变化,但是eip值变了
0080c009 5B pop ebx ;这里ebx就动态地变为0080c009
0080c00A 81EB09104000 sub ebx,0040c009 ;注意代码没有变
所以ebx就会变为0080c009-0040c009=00400000,得到一个相对基址00400000


3.所以1中 mov eax,[ebx+varA] =moveax,[0+00400000];eax=01234567
2中 mov eax,[ebx+varA] =moveax,[00400000+00400000];eax=01234567
数据的地址会变化,但是基地址ebx也随着变化,我们总能找到正确的地址
上面就是对ebx作用的一种情况分析,相信你能明白这个基地址的作用,也就理解了这个问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值