微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

解决方法

我想你想看看 this answer

在第 6.2.3 节中有

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

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

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

Procedure Call Standard for the Arm 64-bit Architecture

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。