leaveq&&retq
-
https://blog.csdn.net/linuxheik/article/details/49277041
在函数退出时,为啥没有看到恢复RBP和RSP指令呢?
答案是用了leaveq指令:
leaveq和retq中的q是指64位操作数。
leaveq相当于:
movq %rbp, %rsp
popq %rbp
leaveq跟函数进入时的如下操作是对应的:
push %rbp
mov %rsp,%rbp
有些指令集也把上述的两条指令叫做enterq。
retq相当于:
popq %rip
而与retq对应的是callq,相当于:
pushq %rip
jmpq addr
这里也体现了call指令和jmp指令的区别:call指令会自动将返回地址压栈,而jmp指令不会,也就是说call指令执行完后会回来,而jmp后就不会回来了。
没有评论:
发表评论