C++ 在寄存器/缓存中获取当前值?
在ASM/C/C++中,是否有任何方法可以查询缓存中内存地址的内容,甚至获取寄存器中的当前值C++ 在寄存器/缓存中获取当前值?,c++,caching,assembly,cpu,cpu-registers,C++,Caching,Assembly,Cpu,Cpu Registers,在ASM/C/C++中,是否有任何方法可以查询缓存中内存地址的内容,甚至获取寄存器中的当前值 这会像海森堡原理一样有效吗?试图从寄存器中检索值的代码可能导致寄存器被卸载?大多数处理器中没有“从缓存中读取值”的标准指令。可以推测,现代处理器能够出于测试目的读取/写入缓存内容,但如果存在此类指令,则它们不会公开描述,并且在使用它们时可能需要小心,以避免干扰实际代码的执行。读取任何内存都可能会影响要检查的缓存线中的内容 寄存器值需要相当仔细地注意如何编写代码,并且通常几乎不可能存储所有寄存器值而不影响
这会像海森堡原理一样有效吗?试图从寄存器中检索值的代码可能导致寄存器被卸载?大多数处理器中没有“从缓存中读取值”的标准指令。可以推测,现代处理器能够出于测试目的读取/写入缓存内容,但如果存在此类指令,则它们不会公开描述,并且在使用它们时可能需要小心,以避免干扰实际代码的执行。读取任何内存都可能会影响要检查的缓存线中的内容 寄存器值需要相当仔细地注意如何编写代码,并且通常几乎不可能存储所有寄存器值而不影响某些地方,尽管在大多数处理器中,通过使用“推送”类型指令在堆栈上存储值可以非常接近。一旦“保存”了这些值,就可以使用常规内存读取指令获取它们,而且由于这些值已经存储起来了,所以您可以(几乎)为代码的其余部分使用任何寄存器 编辑:由于现在已指定处理器类型: 在32位模式的x86处理器上,可以使用<代码> PUPAS<代码>将所有寄存器推到堆栈上(包括列表中间的ESP的原始值)。但是,对于x86-64,必须对每个寄存器使用单独的推送指令。但这样做仍然是可行的
我不熟悉英特尔关于检查缓存内容的任何指令 您感兴趣的任何特定CPU?海森堡原理肯定适用于缓存以及寄存器
printf()
和系列使用的任何寄存器。但除此之外,你可以尝试使用调试器来破坏程序。@CaptainObvlious我脑子里没有特定的CPU。比较现代。尼哈勒姆+?