正在获取寄存器/缓存中的当前值

Obtaining current value in registers/cache?

本文关键字:缓存 获取 寄存器      更新时间:2023-10-16

(在ASM/C/C++中)是否有任何方法可以查询缓存中内存地址的内容,甚至获取寄存器中的当前值?

这会像海森堡原理一样有效吗?试图从寄存器中检索值的代码可能会导致寄存器被卸载?

大多数处理器中都没有"从缓存中读取值"的标准指令。可以推测,现代处理器能够出于测试目的读取/写入缓存内容,但如果有这样的指令,它们不会公开描述,并且在使用它们时可能需要小心,以避免干扰实际执行的代码。读取任何内存都可能影响要检查的缓存行中的内容。

寄存器值需要非常小心地注意如何编写代码,通常几乎不可能在不影响某个地方的某些东西的情况下存储所有寄存器值,尽管在大多数处理器中,通过使用"推送"类型的指令在堆栈上存储值可以非常接近。一旦"保存"了这些值,就可以使用正则内存读取指令来获取它们,而且由于这些值已经存储好了,所以您可以(几乎)为代码的其余部分使用任何寄存器。

编辑:由于现在指定了处理器类型:在32位模式的x86处理器上,可以使用PUSHA将所有寄存器推送到堆栈上(包括列表中间ESP的原始值)。但是,对于x86-64,您必须为每个寄存器使用单独的PUSH指令。但这样做仍然可行。

我不熟悉英特尔关于检查缓存内容的任何说明。