html tool

2019年1月29日星期二

leaveq/retq


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后就不会回来了。



没有评论:

发表评论