Retq指令,它在哪里返回

我无法理解汇编指令retq返回的位置。

我知道当我的普通代码执行时,它会返回到堆栈中指定的地址。 但它如何知道堆栈中的返回地址?

简而言之,它是否使用rbp或esp来查找堆栈中的地址?


在学习汇编代码之后,这里是我的想法:让我们看一个示例:

fun:
push %rbp
mov %rsp,%rbp
...
...
pop %rbp
retq

main:
...
...
callq  "address" <fun>
...
...

我们可以看到在retq之前有一条指令。 “pop%rbp”(有时它是离开指令,但有类似的)指令

  • 将当前堆栈指针(rsp)指向的内容移动并保存到基本堆栈指针(rsp)。
  • 将rsp和指针移到堆栈上的前一个地址。
  • 例如:在pop命令之前:rsp被指向0x0000 0000 0000 00D0

    弹出命令后:0x0000 0000 0000 00D8(假设堆栈从高地址增长到低地址)

    在pop命令之后,现在rsp指向一个新地址,并且retq将此地址作为返回地址。

    链接地址: http://www.djcxy.com/p/15275.html

    上一篇: Retq instruction, where does it return

    下一篇: Get all images from a board from a Pinterest web address