我想基于 Yarom 和 Falkner 的FLUSH+RELOAD攻击实现 EVICT+RELOAD,但不使用clflush
指令从缓存中逐出数据。
我对缓存行和页面有一个粗略的了解,例如,这篇文章简洁地解释了它。我知道缓存行是缓存中的最小单位。在我的系统上,一个缓存行有 64 个字节。内存页是指固定长度的连续虚拟内存块。
但是,我真的不明白如何实现它。我很清楚我需要覆盖缓存中的现有数据。另外,我知道缓存是根据访问的地址填满的。但是,如果缓存透明地工作,我如何有选择地覆盖特定的缓存行?
// 附录
问题的帖子有没有办法刷新与程序相关的整个 CPU 缓存?还提到驱逐是一种从缓存中删除数据的策略:“或者当然为已知的 L1d 大小和关联性创建冲突驱逐,例如以 4kiB 的倍数写入多行,这些行都映射到 32k / 8-方式 L1d。” 但它没有提供有关如何完成它的任何细节。