- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在检查 Swift iOS 函数的寄存器时,我不明白为什么我无法创建某些 arm64 寄存器到 x86/64 寄存器的简单映射。我一直在寻找一个函数的入口。
我尝试了以下映射,但没有用。
已回答,由下方的@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/
有没有办法在 .swift 文件(编译成 .swift 模块)中声明函数,如下所示: 你好.swift func hello_world() { println("hello world")
我正在尝试使用 xmpp_messenger_ios 和 XMPPFramework 在 iOS 上执行 MUC 这是加入房间的代码。 func createOrJoinRoomOnXMPP()
我想在我的应用程序上创建一个 3D Touch 快捷方式,我已经完成了有关快捷方式本身的所有操作,它显示正确,带有文本和图标。 当我运行这个快捷方式时,我的应用程序崩溃了,因为 AppDelegate
我的代码如下: let assetTag = Expression("asset_tag") let query2 = mdm.select(mdm[assetTag],os, mac, lastRe
我的 swift 代码如下所示 Family.arrayTuple:[(String,String)]? = [] Family.arrayTupleStorage:String? Family.ar
这是我的 JSON,当我读取 ord 和 uniq 数据时出现错误 let response2 : [String: Any] = ["Response":["status":"SUCCESS","
我想将 swift 扩展文件移动到 swift 包中。但是,将文件移动到 swift 包后,我遇到了这种错误: "Type 'NSAttributedString' has no member 'ma
使用CocoaPods,我们可以设置以下配置: pod 'SourceModel', :configurations => ['Debug'] 有什么方法可以用 Swift Package Manag
我正在 Xcode 中开发一个 swift 项目。我将其称为主要项目。我大部分都在工作。我在日期选择器、日期范围和日期数学方面遇到了麻烦,因此我开始了另一个名为 StarEndDate 的项目,其中只
这是 ObjectiveC 代码: CCSprite *progress = [CCSprite spriteWithImageNamed:@"progress.png"]; mProgressBar
我正在创建一个命令行工具,在 Xcode 中使用 Swift。我想使用一个类似于 grunt 的配置文件确实如此,但我希望它是像 Swift 包管理器的 package.swift 文件那样的快速代码
我假设这意味着使用系统上安装的任何 swift 运行脚本:#!/usr/bin/swift 如何指定脚本适用的解释器版本? 最佳答案 Cato可用于此: #!/usr/bin/env cato 1.2
代码说完全没问题,没有错误,但是当我去运行模拟器的时候,会出现这样的字样: (Swift.LazyMapCollection (_base:[ ] 我正在尝试创建一个显示报价的报价应用。 这是导入
是否可以在运行 Swift(例如 Perfect、Vapor、Kitura 等)的服务器上使用 RealmSwift 并使用它来存储数据? (我正在考虑尝试将其作为另一种解决方案的替代方案,例如 no
我刚开始学习编程,正在尝试完成 Swift 编程书中的实验。 它要求““编写一个函数,通过比较两个 Rank 值的原始值来比较它们。” enum Rank: Int { case Ace = 1 ca
在您将此问题标记为重复之前,我检查了 this question 它对我不起作用。 如何修复这个错误: error: SWIFT_VERSION '5.0' is unsupported, suppo
从 Xcode 9.3 开始,我在我的模型中使用“Swift.ImplicitlyUnwrappedOptional.some”包裹了我的字符串变量 我不知道这是怎么发生的,但它毁了我的应用程序! 我
这个问题在这里已经有了答案: How to include .swift file from other .swift file in an immediate mode? (2 个答案) 关闭 6
我正在使用 Swift Package Manager 创建一个应用程序,我需要知道构建项目的配置,即 Debug 或 Release。我试图避免使用 .xcodeproj 文件。请有人让我知道这是否
有一个带有函数定义的文件bar.swift: func bar() { println("bar") } 以及一个以立即模式运行的脚本foo.swift: #!/usr/bin/xcrun s
我是一名优秀的程序员,十分优秀!