【发布时间】:2017-04-01 12:29:16
【问题描述】:
我们正在编译一个 32 位应用程序,该应用程序与 cryptopp 的静态构建链接。
gcc: 4.4.7
CPU: Intel Xeon E5-2680
操作系统: CentoOS 6.5
加密++: 5.6.2
我们的程序在这台机器上编译并运行良好。当我们尝试在
上运行时CPU: Intel Xeon X5690
操作系统: CentoOS 6.5
gcc: 4.4.6
我们在 cryptopp -> rijndael.cpp -> Rijndael::Base::UncheckedSetKey() 调用 _mm_loadu_si128() 中遇到分段错误
如果我们在 CRYPTOPP_BOOL_AESNI_INTRINSICS_AVAILABLE 设置为 0 的情况下构建 cryptopp,一切运行正常。似乎 AES-NI 在此服务器上应该可用,并且对 HasAESNI() 的 cryptopp 调用返回 true。
关于可能导致此问题的原因或如何进一步追踪的任何想法?
【问题讨论】:
-
_mm_loadu_si128是MOVDQU。我相信它是一个 SSE2 指令。您是否在 Intel Xeon X5690 机器上编译了 Crypto++ 和您的程序(或者您是否从另一台机器上复制了它)? Intel Xeon X5690 上的微码是最新的吗(我相信该指令是用微码模拟的)? -
如果我们在 X5690 上编译,它可以在该机器上运行。在 E5-2680 上编译并复制到 X5690 时出现错误。我会研究一下微码,不太熟悉。