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

时间:2013-07-02 23:23:38

标签: c++ caching assembly cpu cpu-registers

有没有办法(在ASM / C / C ++中)能够查询缓存中的内存地址内容,甚至可以在寄存器中获取当前值?

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

1 个答案:

答案 0 :(得分:2)

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

寄存器值需要非常小心地注意如何编写代码,并且通常几乎不可能存储所有寄存器值而不会影响某处的某些情况,尽管通过使用&#34可以在大多数处理器中非常接近推送#34;键入指令以在堆栈上存储值。一旦值保存",就可以使用常规存储器读取指令获取它们,并且由于这些值已经存储起来,因此您可以使用(几乎)任何寄存器来执行其余代码。

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

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