我有一些具有多种实现的密码学代码,在运行时根据它运行的 CPU 的特性选择哪个实现。到目前为止,移植它一直很简单,Windows、Linux 和 Android 都很容易。
但在 iOS 中,这似乎并不容易。尽管 x86 CPU 具有cpuid
检测功能的指令,即使是在用户模式下,ARM 等效项也具有特权。如果没有操作系统的合作,就无法检测 ARM 上的 CPU 功能。
在 Windows 中,IsProcessorFeaturePresent
用于检测 ARM CPU 功能。在 Linux 上,/proc/cpuinfo
这是要走的路。Android 有一个cpufeatures
库(并且/proc/cpuinfo
仍然可以使用)。Mac OSsysctlbyname
带有hw.optional.*
.
但是iOS呢?iOS 内核hw.optional.*
与 Mac OS 类似,但它在 iOS 10 中被锁定。(因此,我的问题不是这个问题的重复,因为情况已经发生了变化。)此外,获取这些内核似乎很困难 - Apple 的开源网站运行一个自动化流程,从他们公开提供的操作系统源中清除所有 ARM 特定代码,以使越狱者更加努力。