4

ARM 的 aarch64 有一条 AT(地址转换)指令,该指令通过地址转换阶段运行虚拟地址,返回 PAR_EL1 中的物理地址,以及指示转换是否存在的状态。请参阅 ARMv8 ARM,第 C5.5 节。

问题是:x86_64 是否有等价物?Intel 的系统编程指南(第 3 卷,第 5 章)谈到了指针验证,但这些方法似乎适用于段级保护,并且似乎没有任何页级保护指针验证指令。

有人知道 x86_64 的类似 ARMv8-AT 的指令吗?

4

1 回答 1

5

不,x86-64 指令集没有执行物理到虚拟地址转换的指令。它只有基本的指令,如设置页目录寄存器、使地址无效和启用分页。

如果您想在 x86-64 上使用此功能,恐怕您需要处于主管模式才能这样做。您将读取 CR3 寄存器,可能更改一些页表映射以访问您需要的物理地址,并通过手动遍历页目录和表来执行地址转换。

您的问题提出了一个问题作为回应:您出于什么目的需要了解虚拟到物理地址的转换?分页应该对应用程序是透明的,很少有充分的理由知道与特定虚拟内存地址对应的物理内存地址。

于 2016-03-14T05:59:44.533 回答