如何使用 __cpuid 检查 AES-NI 支持?
Posted
技术标签:
【中文标题】如何使用 __cpuid 检查 AES-NI 支持?【英文标题】:How to check AES-NI support with __cpuid? 【发布时间】:2018-05-30 16:36:37 【问题描述】:我正在寻找一种方法来检查我的 CPU 是否支持 AES-NI 指令。我在 Internet 上发现了很多东西,但其中很多都是内联汇编代码,而且由于我在 Microsoft Visual Studio 下并且我在 x64 中编译,所以这不起作用。 Visual Studio 不支持 x64 内联汇编代码,而 x64 对我来说至关重要。
于是我找到了内在函数__cpuid()。问题是我不知道汇编/内在用途等……(我只是复制粘贴我找到的代码)
所以我在这里问你关于我使用互联网代码片段自己编写的以下代码。输出是“AES-Ni supported”,但这并不意味着我的代码是正确的,并且真正检索了我的 CPU 的 AES-NI 容量。
int cpuInfo[4] = -1 ;
__cpuid(cpuInfo, 1);
_Bool returned = ((cpuInfo[3] & 0x2000000) != 0);
if (returned == 1)
printf("AES-NI supported");
else
printf("AES-NI not-supported");
【问题讨论】:
请注意,“官方”微软解决方案是here 是的,谢谢,但由于它是 C++,我并没有真正阅读整篇论文。无论如何,谢谢你 【参考方案1】:AES 位在 ECX(第 25 位)中,因此您应该使用 cpuInfo[2]。
【讨论】:
以上是关于如何使用 __cpuid 检查 AES-NI 支持?的主要内容,如果未能解决你的问题,请参考以下文章
如何修复模拟器:qemu-system-x86_64:警告:主机不支持请求的功能:CPUID.80000001H:ECX.abm [位 5]
Patch OpenSSL使其支持CHACH20_POLY1305加密算法