【发布时间】:2017-09-18 03:13:28
【问题描述】:
我有一些具有多个实现的加密代码,在运行时根据运行它的 CPU 的特性来选择哪个实现。到目前为止,移植它一直很简单,Windows、Linux 和 Android 都很容易。
但在 iOS 中,这似乎并不容易。虽然 x86 CPU 有 cpuid 指令来检测功能,即使在用户模式下,ARM 等效项也具有特权。没有操作系统合作,无法检测 ARM 上的 CPU 功能。
在 Windows 中,IsProcessorFeaturePresent 用于检测 ARM CPU 功能。在 Linux 上,/proc/cpuinfo 是要走的路。 Android 有一个 cpufeatures 库(并且 /proc/cpuinfo 仍然可以使用)。 Mac OS 有sysctlbyname 和hw.optional.*。
但是 iOS 呢? iOS 内核有 hw.optional.* 和 Mac OS 一样,但它在 iOS 10 中是 locked down。(因此,我的问题不是 this one 的重复,因为情况已经发生了变化。)此外,获得这些似乎困难 - Apple 的开源网站运行一个自动化流程,从他们公开提供的操作系统源中清除所有 ARM 特定代码,以使越狱者更加努力。
【问题讨论】:
-
如何运行不同的方法并检查它们是否可用或测量使用的时间。这显然需要编写更多代码,但我不知道有任何其他方法可以检测您的加密代码的最佳实现..