汇编 CALL 和 RET 堆栈
Assembly CALL and RET stack
我有question.When我知道
call <address>
等同于
push rip
jmp <address>
我也知道
ret
等同于
pop rip
jmp <rip>
但是如果我们跳到 rip 为什么我们不再次开始这个循环因为我们在跳转之前按下 rip 并且 rip 在跳转时指定?你能解释一下我们如何在代码中传递这个跳转吗
不同的处理器有不同的处理方式。在某些情况下,call
在调用后推送指令的地址。在其他情况下,ret
在跳转之前将调用指令的长度添加到 return 地址。
第一种方法更灵活,因为它可以在call
中使用不同指令长度的各种寻址方式。在处理 call
时,指令解码器也可能已经知道下一条指令的位置。
我有question.When我知道
call <address>
等同于
push rip
jmp <address>
我也知道
ret
等同于
pop rip
jmp <rip>
但是如果我们跳到 rip 为什么我们不再次开始这个循环因为我们在跳转之前按下 rip 并且 rip 在跳转时指定?你能解释一下我们如何在代码中传递这个跳转吗
不同的处理器有不同的处理方式。在某些情况下,call
在调用后推送指令的地址。在其他情况下,ret
在跳转之前将调用指令的长度添加到 return 地址。
第一种方法更灵活,因为它可以在call
中使用不同指令长度的各种寻址方式。在处理 call
时,指令解码器也可能已经知道下一条指令的位置。