为了能到远方,脚下的每一步都不能少.|

ONE_ZJ

园龄:2年1个月粉丝:3关注:10

call与retn指令

一. call指令

  1. 将call指令下一跳指令压入栈中
  2. jmp跳转到call指令的地址

一个特殊的运用是call $+5

首先要清楚intel+5就表示是当前地址加5,加上call指令的长度一般为5,即$+5就是下一条指令。

call $+5
pop ebp

1、call将"pop ebp"指令地址push到栈中
2、跳转到"pop ebp"执行
3、"pop ebp"将之前call push进栈的值弹出到ebp中
4、ebp中的值为"pop ebp"指令的地址

二. retn指令

  1. pop指令将栈顶元素弹出存储
  2. jmp跳转到该栈顶元素地址
  3. retn n;表示再前两步操作的基础上加上esp+=n,用于实现堆栈平衡,这里一般的平衡的是压入栈的参数。

需要关注的是retn指令所在的位置一定要是对应call指令所压入地址的位置。

本文作者:ONE_ZJ

本文链接:https://www.cnblogs.com/ONEZJ/p/17630541.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   ONE_ZJ  阅读(239)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起