问题描述
我在理解 ARM 中堆栈帧的工作方式时遇到了一些麻烦。我目前的理解是堆栈帧是堆栈指针和帧指针之间的内存区域,这是程序存储信息的空间。 但是,我正在调试的程序同时具有堆栈指针和帧指针,指向到相同的内存地址。
有谁知道这是否是有效状态?我一直找不到关于这种情况的任何文档,我想知道是否还有其他人知道计算机是如何处理这种情况的。
解决方法
我想你想看看 this answer
在第 6.2.3 节中有
符合标准的代码应构造一个堆栈帧的链表。每个帧应通过以下方式链接到其调用者的帧 堆栈上两个 64 位值的帧记录(独立于数据模型)。帧记录为 最里面的帧(属于最近的例程调用)应由帧指针寄存器指向 (FP)。最低地址的双字应指向前一帧记录和最高地址的双字 双字应包含在进入当前函数时传入 LR 的值。
因此,如果函数使用堆栈将参数传递给被调用函数或进行“动态分配”,则 SP 将与 FP 不同。否则 SP 和 FP 中的地址相同。
PS:这个文档在细节上非常吝啬,恕我直言。如果我弄错了这个规范,我很高兴得到纠正