正在获取寄存器/缓存中的当前值
Obtaining current value in registers/cache?
(在ASM/C/C++中)是否有任何方法可以查询缓存中内存地址的内容,甚至获取寄存器中的当前值?
这会像海森堡原理一样有效吗?试图从寄存器中检索值的代码可能会导致寄存器被卸载?
大多数处理器中都没有"从缓存中读取值"的标准指令。可以推测,现代处理器能够出于测试目的读取/写入缓存内容,但如果有这样的指令,它们不会公开描述,并且在使用它们时可能需要小心,以避免干扰实际执行的代码。读取任何内存都可能影响要检查的缓存行中的内容。
寄存器值需要非常小心地注意如何编写代码,通常几乎不可能在不影响某个地方的某些东西的情况下存储所有寄存器值,尽管在大多数处理器中,通过使用"推送"类型的指令在堆栈上存储值可以非常接近。一旦"保存"了这些值,就可以使用正则内存读取指令来获取它们,而且由于这些值已经存储好了,所以您可以(几乎)为代码的其余部分使用任何寄存器。
编辑:由于现在指定了处理器类型:在32位模式的x86处理器上,可以使用PUSHA
将所有寄存器推送到堆栈上(包括列表中间ESP的原始值)。但是,对于x86-64,您必须为每个寄存器使用单独的PUSH指令。但这样做仍然可行。
我不熟悉英特尔关于检查缓存内容的任何说明。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 使用指针从C++中的数组中获取最大值
- 如何获取std::result_of函数的返回类型
- 如何在openssl-ecc中获取十六进制格式的私钥
- 使用Unreal C++获取VR耳机的世界位置/方向
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 从C字符串中获取奇怪的字符串长度
- 为什么我的for循环不能正确获取argv
- 从python中调用C++函数并获取返回值
- 如何获取一个数字的前3位
- 获取字符串的长度并将其分配给数组
- 获取英特尔 Kaby Lake 架构上最后一级高速缓存未命中计数的确切代码是什么?
- 如何指定创建文件函数获取未缓存的结果?
- 如何在 Linux 下C++获取缓冲/缓存内存大小
- 如何获取每种缓存的数量
- 正在获取寄存器/缓存中的当前值
- 如何通过ODBC从系统间缓存db获取数据
- JNI:给定jobject,获取它的缓存方法