ios - 在 iOS 上是否有检测 CPU 特性的 API?

标签 ios arm neon arm64 cpuid

我有一些具有多个实现的密码学代码,在运行时根据它运行的 CPU 的特性选择哪个实现。到目前为止,移植这个很简单,Windows、Linux 和 Android 很容易。

但在 iOS 中这似乎并不容易。虽然 x86 CPU 有 cpuid 指令来检测功能,即使是在用户模式下,ARM 等价物也有特权。如果没有 OS 的配合,则无法检测 ARM 上的 CPU 特性。

在 Windows 中,IsProcessorFeaturePresent 用于检测 ARM CPU 功能。在 Linux 上,/proc/cpuinfo 是要走的路。 Android 有一个 cpufeatures 库(而且 /proc/cpuinfo 仍然有效)。 Mac OS 有 sysctlbynamehw.optional.*

但是 iOS 呢? iOS内核和Mac OS一样有hw.optional.*,不过是locked down在 iOS 10 中。(因此,我的问题不是 this one 的重复,因为情况已经发生了变化。)此外,获得这些列表似乎很困难 - Apple 的开源网站运行一个自动化过程来清除所有特定于 ARM 的他们公开发布的操作系统源代码,目的是让越狱者更加努力地工作。

最佳答案

你可以看看iOS Security Guide商业

显然,如果您可以获得 CPU 系列名称,您还可以从 documentation. 中推断出哪个加密组件及其工作原理。

您可能会注意到某些设备具有 Security Enclave:

The Secure Enclave is a coprocessor fabricated in the Apple T1, Apple S2, Apple S3, Apple A7, or later A-series processors.

Page 6

并且您可以推断出任何旧的 CPU 版本都没有。

Every iOS device has a dedicated AES-256 crypto engine built into the DMA path between the flash storage and main system memory [...]

On T1, S2, S3, and A9 or later A-series processors, each Secure Enclave generates its own UID (Unique ID).

Page 12

访问加密组件的方法取决于您要访问的数据或存储类型(本地数据存储/同步/家庭数据/应用程序/siri/icloud/secure note/keybag/payment/applepay/vpn/wifi密码/SSO/空投/等...)

您能否准确说明在您的用例中您需要访问加密部分的哪一部分?

你也可以看看herehere获取与 iOS native 安全和加密 API 相关的其他信息。

关于ios - 在 iOS 上是否有检测 CPU 特性的 API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43537255/

相关文章:

iOS 从 iphone 切换到 macbook safari/chrome

ios - 可以将 Storyboard中的导航右栏按钮与编码的按钮结合起来吗?

c++ - 静态变量未初始化

arm - 如何在 ARM/ACLE 中交换向量中单个单词的字节顺序

ios - 确定 iOS 区域 "Europe"的国家代码

ios - Swift 3 - 按钮动画向右跳转

linux - 如何更改嵌入式Linux中的看门狗定时器

assembly - ARMv8 高级 SIMD : "invalid addressing mode at operand 2 -- ` st1 {V1. D}[0],[x20,640 ]'"

arm - 加载向量 NEON 内在函数

将short转换为int并用NEON求和