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

标签 c++ caching assembly cpu cpu-registers

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

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

最佳答案

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

寄存器值需要相当仔细地注意您如何编写代码,并且通常几乎不可能在不影响某处某处的情况下存储所有寄存器值,尽管您可以通过使用“推送”类型指令来存储在大多数处理器中非常接近堆栈上的值。一旦值被“保存”,就可以使用常规内存读取指令获取它们,并且由于值已经存储起来,您可以(几乎)使用任何寄存器来完成其余代码。

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

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

关于c++ - 获取寄存器/缓存中的当前值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17437382/

相关文章:

c++ - (boost::&& std::) 绑定(bind)仅在参数太少的 MSVC 上失败

c++ - 使用不带名称的参数

c - GCC优化对位操作的有效性

assembly - 在 x86 asm 中输出变量值

visual-studio - 32 位 MASM 模式与 64 位有何不同?

c++ - 我的 IDE 使用什么 C++ 实现/库? (NetBeans、MacOSX)

c++ - 为什么 std::make_pair 按值而不是 const 引用获取输入?

c - 如何减少 vector 中的访问时间

iOS Kiosk 应用程序 - 应用内电子邮件 - 清除过去/自动完成的电子邮件地址

Mendix 中的缓存和 AOP : is there a uniform or standardized approach for server-side caching within a Mendix application?