Kau*_*hah 8 stack-overflow inline-assembly
我无法理解汇编指令retq返回的位置.
据我所知,当我的普通代码执行时,它会返回到堆栈中指定的地址.但它如何知道堆栈中的返回地址位于何处?
简而言之,它是否使用rbp或esp来查找堆栈中的地址?
学习汇编代码后,以下是我的想法,让我们看一个示例:
fun:
push %rbp
mov %rsp,%rbp
...
...
pop %rbp
retq
main:
...
...
callq "address" <fun>
...
...
Run Code Online (Sandbox Code Playgroud)
我们可以看到之前有一条指令retq。的pop %rbp(有时是假的指令,但它们是相似的)指令将
%rsp到基堆栈指针%rbp。%rsp指针移动到堆栈上的前一个地址。例如:在 pop 命令之前,%rsp指向0x0000 0000 0000 00D0. 在pop它指向的命令之后0x0000 0000 0000 00D8 (假设堆栈从高地址增长到低地址)。
在之后pop的命令,现在%rsp指向一个新的地址,并retq借此地址作为返回地址。
| 归档时间: |
|
| 查看次数: |
14174 次 |
| 最近记录: |