【发布时间】:2021-05-31 13:47:59
【问题描述】:
我有疑问。当我知道时
call <address>
等价于
push rip
jmp <address>
我也知道
ret
等价于
pop rip
jmp <rip>
但是如果我们跳转到 rip 为什么我们不重新开始这个循环,因为我们在跳转之前推送 rip 并且在跳转时指定 rip?你能解释一下我们如何在代码中传递这个跳转
【问题讨论】:
-
因为 RIP 总是指向下一条要执行的指令——而不是当前指令。
-
来自英特尔的手册:"3.5 INSTRUCTION POINTER指令指针(EIP)寄存器包含当前代码段中下一个要执行的指令的偏移量“.
-
没错,但是当我们在下一条指令(跳转)上推送它时,当我们弹出它时,它仍然在跳转时指定
-
感谢 Doug Currie 先生,我明白了