堆栈指针和帧指针指向 ARM 64 中的相同地址是否有效?

时间:2021-02-10 18:41:16

标签: assembly cpu-registers arm64 stack-frame stack-pointer

我在理解 ARM 中堆栈帧的工作方式时遇到了一些麻烦。我目前的理解是堆栈帧是堆栈指针和帧指针之间的内存区域,这是程序存储信息的空间。 但是,我正在调试的程序同时具有堆栈指针和帧指针,指向到相同的内存地址。

有谁知道这是否是有效状态?我一直找不到关于这种情况的任何文档,我想知道是否还有其他人知道计算机是如何处理这种情况的。

1 个答案:

答案 0 :(得分:2)

我想你想看看 this answer

在第 6.2.3 节中有

<块引用>

符合标准的代码应构造一个堆栈帧的链表。每个帧应通过以下方式链接到其调用者的帧 堆栈上两个 64 位值的帧记录(独立于数据模型)。帧记录为 最里面的帧(属于最近的例程调用)应由帧指针寄存器指向 (FP)。最低地址的双字应指向前一帧记录和最高地址的双字 双字应包含在进入当前函数时传入 LR 的值。

因此,如果函数使用堆栈将参数传递给被调用函数或进行“动态分配”,则 SP 将与 FP 不同。否则 SP 和 FP 中的地址相同。

PS:这个文档在细节上非常吝啬,恕我直言。如果我弄错了这个规范,我很高兴得到纠正

Procedure Call Standard for the Arm 64-bit Architecture

相关问题