检测 AES-NI CPU 指令

Detecting AES-NI CPU instructions

最近的 Intel 和 AMD CPUs 支持提高加密和解密性能的特定 AES instructions

是否可以检测这些指令何时被调用?例如,通过编写一个内核模块来监视发送到 CPU?还是内核还处于高层?

我的理解是,像 AESENC 这样的指令不需要特殊权限,因此即使在内核中,您也无法使用一种常用的故障处理程序来捕获它们。您也许可以使用 QEMU 或 VirtualBox 的修改版本来完成,但这会有点痛苦。

我猜你是想看看某个软件包是否支持 AES-NI?

目前接受的答案在某种意义上在技术上是正确的。但是它没有回答你的问题。

理论上,可以监视任何进程何时使用这些指令。然而,这会产生不可行的开销。每次执行任何指令时,您基本上都必须执行条件分支 (!)。它可以通过使用 in-target probe 来实现,但是这是一个非常昂贵且不可扩展的解决方案。

一个更现实但不太精确的解决方案是进行程序计数器采样。您可以通过查看进程程序计数器来检查在给定时刻正在执行的指令。进程的程序计数器确实可以从内核模块访问。如果您以足够高的分辨率进行采样,您可以获得一个不错的指标来判断是否正在使用 AES-NI 指令。