加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – 有哪些苹果平台允许内联汇编?

发布时间:2020-12-15 01:59:32 所属栏目:百科 来源:网络整理
导读:自从苹果公司宣布解码后,我一直在尝试解密一段时间,现在各种平台上的内联汇编状态是什么。 截至目前(Xcode 7.1.1),这是我观察到的: OSX – 允许(我期待永远) iOS – 允许,即使使用位代码(内联汇编放入位代码)with probable confirmation watchOS – 不
自从苹果公司宣布解码后,我一直在尝试解密一段时间,现在各种平台上的内联汇编状态是什么。

截至目前(Xcode 7.1.1),这是我观察到的:

> OSX – 允许(我期待永远)
> iOS – 允许,即使使用位代码(内联汇编放入位代码)with probable confirmation
> watchOS – 不允许(不会编译,给内联汇编被禁用错误)
> tvOS – 允许

然而,这些都是可疑的结论,因为我没有每个市场上的应用程序来验证这一点。

我已经看到开源库和应用程序的一些帖子,当包含内联汇编和位码时,iOS应用程序将被拒绝。我看到一些帖子,tvOS是类似于watchOS,不会让你使用内联汇编(可能固定在最新的Xcode?)

有没有一些可靠的参考从苹果或..任何关于什么平台我可以使用内联汇编?

解决方法

在任何ARM平台(iOS,watchOS,tvOS)上,如果您提供混合的bitcode / asm存档,则只能与嵌入式asm相同的架构编译(见下文)。这意味着您可以提交针对该架构的完整二进制应用程序 – 提交位代码绝对没有任何优势(因此,苹果没有理由允许它)。

根据Apple docs位代码对于watchOS和tvOS是必需的,因此内联汇编被禁用。

Note: For iOS apps,bitcode is the default,but optional. For watchOS
and tvOS apps,bitcode is required. If you provide bitcode,all apps
and frameworks in the app bundle (all targets in the project) need to
include bitcode. After you distribute your app using iTunes Connect,
you can download the dSYMs file for the build,described in Viewing
and Importing Crashes in the Devices Window.

On X86,一个包含比特码和X86 ASM混合的存档可以编译成64位应用程序。这不是一件明智的事情,因为手工制作的汇编程序大概是性能关键部分,但它可以工作。

在ARM上也是如此。 X86案例是因为X86指令集是X86_64的纯粹子集,这意味着任何X86汇编器都是有效的X86_64汇编器。在ARM上,64位处理器需要运行在32位状态才能执行32位代码。根据ARM docs,您不能在同一应用程序中混合32位和64位程序集(请参阅更改执行状态)

…Practically speaking,this means that you cannot have a mixed 32-bit and 64-bit application,because there is no direct way of calling between them.

这意味着如果您提供了基于ARM架构ARCH的位线加内联asm的混合,实际上AppStore只能做(至少目前为止)编译ARCH的位代码,它可以让您(说)一个完整的32位应用程序在64位处理器上运行。重点是什么?首先上传一个没有位代码的普通32位可执行文件要简单得多。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读