X86 缓存为Ram(无填充模式)可执行代码

X86 缓存为Ram(无填充模式)可执行代码,x86,cpu-architecture,cpu-cache,osdev,X86,Cpu Architecture,Cpu Cache,Osdev,我已经读了很多关于缓存为ram模式(无填充模式)的书,我想知道第一,可执行代码是否可以被写入和跳转到,如果可以,可执行代码是否限制在一级缓存的一半(因为缓存实际上只是sram) Coreboot最初用于将C堆栈保存在一级数据缓存中: 要执行代码,我们应该将统一L2切换到CAR模式,然后L1i(您应该知道,大多数现代桌面/应用程序CPU都将L1分开:一个用于数据—L1d—具有读/写功能,另一个用于代码—只读L1i)将能够从CAR L2读取代码。这种模式是在“UBRX-x86 PC的通用BIOS恢复

我已经读了很多关于缓存为ram模式(无填充模式)的书,我想知道第一,可执行代码是否可以被写入和跳转到,如果可以,可执行代码是否限制在一级缓存的一半(因为缓存实际上只是sram)

Coreboot最初用于将C堆栈保存在一级数据缓存中:

要执行代码,我们应该将统一L2切换到CAR模式,然后L1i(您应该知道,大多数现代桌面/应用程序CPU都将L1分开:一个用于数据—L1d—具有读/写功能,另一个用于代码—只读L1i)将能够从CAR L2读取代码。这种模式是在“UBRX-x86 PC的通用BIOS恢复控制台”()中实现的:

ondie上有两个L1缓存:一个用于数据,另一个用于指令,其中一个指令是只读的。因此,coreboot中的CAR设置方法只提供对一级数据缓存的访问,而不提供对指令缓存的访问,因此我们不能简单地将代码上传到一级数据并期望它运行

还有一家商业公司创建了保护代码免受攻击的产品(当攻击者冻结DRAM,拉动DRAM模块并将其移动到其他PC上读取时,大多数数据将保存数十秒)。他们的产品将整个os/hypervisor内核加载到缓存中,代码和数据都存储在CPU中。该产品是PrivateCore的vPage(通过和,感谢提供信息):

(“vAge主机打包为RAM磁盘上的无状态实时映像Linux KVM”)

,作者:

“对于vAge,您基本上只需要信任Intel和Private Core。简单地说,vAge提供了一个经过远程认证的L3驻留虚拟机监控程序。”

检查第36页的幻灯片

“作为计算周界的CPU•物理安全是CPU包本身•将无状态映像加载到CPU缓存”

图像加载到CPU缓存(L3);操作系统是linux!(幻灯片39)

最大的挑战•将Linux内核压缩到<10MB,同时–保持所有虚拟化功能–保持其稳定(不允许OOM)•保持CPU缓存在我们的控制之下


这意味着vage能够从缓存执行代码;但该公司现在不是Facebook的公共部分,因此没有更新的详细信息或linux修补程序的开源。

PrivateCore的Weis(BH 2014)的“保护使用中的数据免受固件和物理攻击”也列出了一些其他缓存作为代码的ram保护项目:“CARMA[68]是另一种将密钥和受信任代码完全保留在CPU缓存中的方法…不支持主内存;软件加密处理器[36]…所有密钥材料和内核代码仍然驻留在L3缓存中,并且永远不会以明文形式暴露在内存中。”(和近文本)回答得很好!谢谢相关:介绍了有关如何进入无填充模式的更多详细信息。