call与retn指令
一. call指令
- 将call指令下一跳指令压入栈中
- jmp跳转到call指令的地址
一个特殊的运用是call $+5
首先要清楚
call $+5
pop ebp
1、call将"pop ebp"指令地址push到栈中
2、跳转到"pop ebp"执行
3、"pop ebp"将之前call push进栈的值弹出到ebp中
4、ebp中的值为"pop ebp"指令的地址
二. retn指令
- pop指令将栈顶元素弹出存储
- jmp跳转到该栈顶元素地址
- retn n;表示再前两步操作的基础上加上esp+=n,用于实现堆栈平衡,这里一般的平衡的是压入栈的参数。
需要关注的是retn指令所在的位置一定要是对应call指令所压入地址的位置。
本文作者:ONE_ZJ
本文链接:https://www.cnblogs.com/ONEZJ/p/17630541.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步