call与retn指令
一. call指令
- 将call指令下一跳指令压入栈中
- 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指令
- pop指令将栈顶元素弹出存储
- jmp跳转到该栈顶元素地址
- retn n;表示再前两步操作的基础上加上esp+=n,用于实现堆栈平衡,这里一般的平衡的是压入栈的参数。