gpt4 book ai didi

ios - 在 iPhone ARM64 调用约定中,寄存器 $x1 中的内容是什么?

转载 作者:可可西里 更新时间:2023-11-01 05:08:35 35 4
gpt4 key购买 nike

我很难理解 Apple ARM64 Function Calling Conventions文档和 ARM Procedure Call Standard .

调用函数时,我了解到 $r0self,而 $r2 似乎是第一个函数参数。

$x1 中有什么?

堆栈指针是否指向超过四个的第一个参数?

最佳答案

您想阅读 AAPCS64 的“基本过程调用标准”一章的“子例程调用”部分;他们的寄存器命名约定使用“r0..r30”,而 lldb 使用“x0..x30”。 x1 是第二个参数寄存器。 x0 是第一个。 arm64 iOS ABI 与 AAPCS64 的最大区别在于可变参数函数(printf 等)的调用方式。您链接到的苹果文档详细说明了确切的区别。

lldb 为 armv7/arm64/x86_64 提供寄存器别名 $argi,以引用第 i 个参数。 $arg1$arg2 等(参数在 i386 上的堆栈上传递,因此别名未在此处定义)我建议使用这些方便的名称而不是如果可能的话,担心架构的细节。

注意这些参数传递寄存器内容仅在函数开始时有效。它们通常保存在堆栈中或复制到其他寄存器中——只要进行另一个函数调用,这些寄存器就会被重用/覆盖。

关于ios - 在 iPhone ARM64 调用约定中,寄存器 $x1 中的内容是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27831946/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com