gpt4 book ai didi

swift - 使用 Swift/lldb 比较 Intel 和 Arm 寄存器

转载 作者:行者123 更新时间:2023-11-28 11:52:41 25 4
gpt4 key购买 nike

在检查 Swift iOS 函数的寄存器时,我不明白为什么我无法创建某些 arm64 寄存器到 x86/64 寄存器的简单映射。我一直在寻找一个函数的入口。

我尝试了以下映射,但没有用。

enter image description here

已回答,由下方的@JasonMolenda 提供。

lldb 为这个目的提供了方便的 $arg 变量。

(lldb) reg read $arg5
x4 = 0x0000000000000020

(lldb) po $arg3
1

(lldb) p/x $arg3
(unsigned long) $4 = 0x0000000000000001

现在你不需要记住 x86/64 到 arm64 的映射:o)

最佳答案

如果您只是查看调用约定并在函数的进入/退出时注册(而不是在中间),那么是的,这些适用于 x86-64 System V 调用约定。

参见 What are the calling conventions for UNIX & Linux system calls on i386 and x86-64有关函数调用约定的摘要(有关 ABI 的完整详细信息,请参阅 https://github.com/hjl-tools/x86-psABI/wiki/X86-psABI,包括如何按值传递/返回大小结构和 FP 值。)

根据 https://en.wikipedia.org/wiki/Calling_convention#ARM_(A64) ,AArch64 的标准调用约定在 x0..x7 中传递 args,并在 x0 中返回。 (从那个 super 简短的总结中不清楚可以在寄存器中返回多大的 arg,是否可以在 x1:x0 中返回 16 字节的结构。)


但是一个函数中,它完全取决于编译器,它甚至不会尝试类似的代码生成。

您正在为不同的架构编译不同的二进制文件。在为 x86-64 编译时,编译器可能甚至没有尝试制作看起来像 AArch64 的 asm,只是为了应用“as-if”规则并使 asm 尽可能高效地为 x86-64 实现该功能。

不同的调整启发式将导致不同的内联和其他代码生成决策。

AArch64 比 x86-64 有更多的架构寄存器。显然,即使您使用 x86-64 编译器试图使 x86-64 asm 看起来像具有相同功能的 AArch64 asm,也不会有 1:1 映射。

关于swift - 使用 Swift/lldb 比较 Intel 和 Arm 寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51656448/

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