Как проверить, поддерживаются ли aes-ni процессором?
Я искал решение, как проверить AES-NI доступны на CPU. Мне нужно поместить эту информацию в мое приложение, поэтому я не ищу никаких CPU-Z, команд bash или чего-то еще. Я знаю, что это рассматривается как флаг AES. Я понятия не имею, как проверить это в сборке или c. Основное приложение написано на C#, но это не имеет значения.
2 ответа
Решение
Эта информация возвращается cpuid
инструкция. Пройти в eax=1
и бит № 25 в ecx
покажет поддержку. См. Ссылку на набор инструкций Intel для более подробной информации. Образец кода:
mov eax, 1
cpuid
test ecx, 1<<25
jz no_aesni
Кроме того, вы можете просто попробовать выполнить его и поймать исключение.
В визуальном C++
static bool GetNNICapability()
{
unsigned int b;
__asm
{
mov eax, 1
cpuid
mov b, ecx
}
return (b & (1 << 25)) != 0;
}