不同 CPU 上的硬件强制 DEP

信息安全 开发 部门 x86 手臂
2021-08-17 22:16:29

在来自不同制造商(英特尔、AMD、nVidia、德克萨斯……)的 CPU 上实现硬件 DEP 的方式有什么不同吗?

硬件 DEP 在 x86 和 ARM 上的工作方式是否存在显着差异?

1个回答

x86 兼容 CPU 的名称恰如其分:它们彼此兼容这意味着相同的操作系统代码将适用于所有这些。因此,从在处理器上运行的代码(包括操作系统本身)的角度来看,事情不会因品牌而异(很大)。事情会因代而:较新的系统具有NX 位,而较旧的系统必须依赖于段寄存器的技巧或复杂的 TLB/缓存舞蹈(有关详细信息,请参阅此答案)。

所有现代 CPU 的核心概念都是相同的:地址空间被分成固定大小的页面(或者,如果支持不同的页面大小,它们的长度都是给定原子长度的倍数,通常为 4 或 8 kB)。访问权限以页面粒度强制执行:整个页面是可读和/或可写和/或可执行的。

在硬件方面,MMU实现的细节可能会有很大差异,但在一个相当通用的框架内:每个页面的访问权限存储在表中(主表的地址记录在特定的 CPU 寄存器中)并缓存在专用结构(TLB)中以加快访问速度。每次访问内存时,都会从 TLB 加载目标页面的权限(必要时从 RAM 中填充 TLB)并与访问类型进行比较。CPU 很清楚它正在执行什么样的内存访问(无论是代码执行还是数据读取或数据写入)。旧的 x86 MMU 中缺乏对 DEP 的硬件支持是当时英特尔设计人员的遗漏(80386 大约在 1982 年);它可能在某处保存了一层晶体管。可敬的1979 年的68000不包括 MMU,但足够聪明,可以在其连接器上为每次访问宣传访问类型,并且确实区分了代码执行和数据读取。

在 ARM CPU 上,相同的概念有效(仍然是按页访问权限),但 MMU 表格式与 x86 不同。