Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 如何在Mac上使用AES-NI内部函数?_Xcode_Gcc_Aes_Sse_Llvm Gcc - Fatal编程技术网

Xcode 如何在Mac上使用AES-NI内部函数?

Xcode 如何在Mac上使用AES-NI内部函数?,xcode,gcc,aes,sse,llvm-gcc,Xcode,Gcc,Aes,Sse,Llvm Gcc,我正试图在Mac上编译一个C应用程序。我使用SSE4和AES-NI内部函数 在Linux中,我只需使用-msse4和-maes标志调用gcc,并包含wmmintrin.h头,我可以调用SSE内部函数,如\u mm\u add\u epi64(a,b)或AES-NI内部函数,如\u mm\u aesenc\u si128(a,b),一切正常 在Mac上更难,因为苹果用llvm GCC取代了GCC,后者还不支持AES-NI。因此SSE4内部函数可以正常工作,但AES内部函数不行。 甚至对AES指令的

我正试图在Mac上编译一个C应用程序。我使用SSE4和AES-NI内部函数

在Linux中,我只需使用-msse4和-maes标志调用gcc,并包含wmmintrin.h头,我可以调用SSE内部函数,如
\u mm\u add\u epi64(a,b)
或AES-NI内部函数,如
\u mm\u aesenc\u si128(a,b)
,一切正常

在Mac上更难,因为苹果用llvm GCC取代了GCC,后者还不支持AES-NI。因此SSE4内部函数可以正常工作,但AES内部函数不行。 甚至对AES指令的内联汇编调用也无法识别

英特尔在其网站上发布了一个新版本,但它只适用于Linux和Windows

我注意到llvm gcc也不支持RDRAND指令,但Intel提供了一种解决方法,它使用一个扩展为原始机器字节码的C宏。()

不幸的是,没有为AES-NI指令提供类似的解决方法,可能是因为指令有参数,不能作为静态机器代码字节进行计算

Mac上确实存在使用AES-NI的程序,包括苹果自己的文件库,所以一定有某种方法可以工作

为了使我的问题具体化,我将如何使用最新的Mac gcc llvm 4.2(Mountain Lion xcode 4.4.1的最新公开发行版)进行以下简单的编译调用:


谢谢你的帮助

苹果开发者支持部门报告说,无法使用Xcode。(事实上,他们的回答有点尖刻,暗示开发者永远不需要直接使用AES-NI,所以我不必费心了。叹气,谢谢,苹果。)

然而,我确实找到了两个可行的解决方案,都是简单地避开苹果的软件。一种是使用英特尔自己的商用C++编译器。
另一种是从源代码下载并编译GCC4.6或4.7,并直接使用。这是我选择的选项。我遵循了GCC编译和安装(虽然很干净)仍然是一个麻烦和解决办法,只是为了使用一个CPU本身,但它可以工作。谢谢,GCC团队

您应该使用的是,而不是
gcc
。这个答案已经改变,因为现代Xcode(4.6.3)可能会改变,而不管Apple.asm volatile(“aesenc…”)://适用于llvm和gcc-4.4+,请确保首先检查CPUID.01H:ECX.AESNI[bit 25]=1 takeaway需要警惕加密,无论是高级还是低级,因为只需一个细微的编码错误就可以暴露出一个大的攻击面。
 __m128i A, B, C;
  /* A, B, C initialized here... */
  A = _mm_aesenc_si128(B, C);