"instruction fetch" 和 "data read" 之间的区别?

Difference between "instruction fetch" and "data read" ?

我有一个关于我正在阅读的论文的问题,该论文演示了使用自散列机制攻击某些防篡改软件。这种自散列之所以有效,是因为作者假设执行的代码与散列代码相同,除了针对处理器操纵内存的方式进行某些操纵外,这是正确的。

在论文中,有以下句子让我感到困扰:“Aucsmith 的 IVK 中的散列和使用网络的校验和系统的关键(隐式)假设是处理器运行使得 D(x) = I( x),其中 D(x) 是“数据读取”的位串结果 来自内存地址 x,I(x) 是从 x 相应长度的“指令提取”的位串结果。

你怎么说 D(x) 和 I(x) 之间的区别?数据读取和指令获取有什么区别?

感谢您的帮助

这些操作的不同之处在于它们发生的时间以及数据在使用前的存储位置。大多数处理器有 dedicated caches for instructions。这可能意味着数据从主内存中获取两次:一次进入数据缓存以计算哈希值,另一次进入指令缓存。

我现在找不到了,但一年前我读到过一种通过在这两个缓存之间造成缓存不一致来隐藏恶意代码的方法。处理器会执行恶意代码,但任何其他读取相同内存作为纯数据的工具都会看到好的代码。 Here is a means of accomplishing this on an ARM chip.