如何解决装配如何正确使用堆栈
我一直有一个关于如何计算堆栈拉伸的问题。比如我在arm64的参数超过8个的时候,他其实用的是我之前的函数调用栈的区域。 BL进入函数后,他用SP加回来得到参数,相当于一个栈。在这种情况下,他如何避免污染之前的堆栈?谢谢你的回答
解决方法
您是对的:在调用您的函数之前,不适合寄存器的函数参数将被压入堆栈。因此,它们将位于函数入口处与 SP
具有正偏移量的地址处,我可以理解为什么您可能会担心访问此内存是不安全的。然而,这段记忆实际上是“你的”。
ARM Procedure Call Standard 部分 6.4.2 声明“允许被调用者修改用于从调用者接收参数值的任何堆栈空间”。所以,没有必要担心。调用者期望您访问此内存,甚至可以根据需要对其进行修改,如果您这样做,则不会有任何破坏。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。