首页 > 解决方案 > 在 x86_64 中使用 Frame 指针而不是 Stack 指针

问题描述

使用 GCC 将简单的 C 代码编译成程序集将具有以下输出:

...
 13         xorl    %eax, %eax
 14         movl    $0, -4(%rbp)
 15         movl    $5, -8(%rbp)
 16         movl    $6, -12(%rbp)
 17         movl    -8(%rbp), %ecx
 18         addl    -12(%rbp), %ecx
 19         movl    %ecx, -16(%rbp)
 20         popq    %rbp
 21         retq

我的问题是,为什么要使用偏移量frame base pointer (rbp)而不是操纵stack pointer (rsp). 这不是拥有堆栈指针的全部意义吗?

如果这个进程的堆栈被其他进程(例如垃圾收集)覆盖,甚至不知道堆栈正在被使用,因为rsp在写入值时不会递减。

标签: assemblyx86-64callstackstack-framered-zone

解决方案


推荐阅读