Как проверить, поддерживаются ли 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;
}
Другие вопросы по тегам