指令跳转的偏移计算(call指令,EIP寄存器)

举例说明一下计算指令跳转的偏移量

目录

                           一、寄存器 eip 存放在执行指令的下一条指令地址,eip唯一确定一条指令。

二、跳转调用其他函数

原理:

计算过程(如何得出e8后四字节地址)

调用getshell函数


一、寄存器 eip 存放在执行指令的下一条指令地址,eip唯一确定一条指令。

在执行到80484b5时,此时eip应当指向下一条的指令地址,也就是80484ba。

二、跳转调用其他函数

还是80484b5这行,本行是想调用函数<foo>,因此使用了e8(call)这条指令。e8后面的四字节地址是要调用的函数指令相对call下一条指令的偏移量

原理:

要使e8后接续的四字节地址(本例为 d7 ff ff ff)与eip相加,等于<foo>函数的地址(08048491)

计算过程(如何得出e8后四字节地址)

以foo函数为例,补码计算8048491(<foo>函数的地址)-80484b5(eip)

8048491-80484b5

=(此处用到补码运算公式)8048491补+(-80484b5)补

=0 0 0 0 0 0100 1001 0001 + 1 f f f f 1011 0100 0110

=1 ff ff 1011 1101 0111

=1 ff ff ff d7

求得ff d7,因为堆栈结构,所以e8后地址应为d7 ff ff ff

调用getshell函数

由图得getshell地址:0 804847d

eip:0 80484b5

080484b5-0804847d=ff ff ff c3

因此只需将e8 d7 ff ff ff改为e8 c3 ff ff ff即可调用getshell函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拉进人山人海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值