Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在寄存器/缓存中获取当前值?_C++_Caching_Assembly_Cpu_Cpu Registers - Fatal编程技术网

C++ 在寄存器/缓存中获取当前值?

C++ 在寄存器/缓存中获取当前值?,c++,caching,assembly,cpu,cpu-registers,C++,Caching,Assembly,Cpu,Cpu Registers,在ASM/C/C++中,是否有任何方法可以查询缓存中内存地址的内容,甚至获取寄存器中的当前值 这会像海森堡原理一样有效吗?试图从寄存器中检索值的代码可能导致寄存器被卸载?大多数处理器中没有“从缓存中读取值”的标准指令。可以推测,现代处理器能够出于测试目的读取/写入缓存内容,但如果存在此类指令,则它们不会公开描述,并且在使用它们时可能需要小心,以避免干扰实际代码的执行。读取任何内存都可能会影响要检查的缓存线中的内容 寄存器值需要相当仔细地注意如何编写代码,并且通常几乎不可能存储所有寄存器值而不影响

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


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

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

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

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


我不熟悉英特尔关于检查缓存内容的任何指令

您感兴趣的任何特定CPU?海森堡原理肯定适用于缓存以及寄存器
printf()
和系列使用的任何寄存器。但除此之外,你可以尝试使用调试器来破坏程序。@CaptainObvlious我脑子里没有特定的CPU。比较现代。尼哈勒姆+?