我怎样才能获得CR3值?

时间:2011-09-20 17:05:00

标签: memory linux-kernel cpu-registers

如何获得CR3值?

此外,如何获取进程A(比如Firefox)的CR3值?

我可以使用任何命令来读取当前的CR3吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

来自here

  

我试图理解PGD的扩展(页面全局目录)   存储在CR3寄存器中的值表示正在运行的进程/线程   Linux调度程序。

     

我知道每个进程都有自己的PGD值,但我很困惑   是调度内核线程时CR3寄存器的值。

     

内核线程只是借用最新的预定进程的PGD(即   意味着,整个地址空间)....这样做是为了节省不必要的   TLB刷新,因为内核线程在内核空间中运行,那就是   与所有流程相同

因此,为了避免TLB(Translation Lookaside Buffer)刷新,内核只使用当前用户模式进程中的PGD,而在用户模式下,每次启动新进程时CR3寄存器都会更改,因为它们位于不同的虚拟地址,所以我猜他们的映射会有所不同。

答案 1 :(得分:0)

但是今天,在易受幽灵漏洞影响的英特尔处理器上,引入了新的缓解措施:KPTI(内核指针表隔离)。它使进程的cr3仅映射内核的一小部分(仅映射访问中断/ syscall所必需的代码/结构)。接下来,将cr3寄存器切换并替换为内核的cr3,这等效于您的进程的cr3,尽管它还将映射所有内核和(调用进程的)用户态页面的NX位置1。