如何获得CR3值?
此外,如何获取进程A(比如Firefox)的CR3值?
我可以使用任何命令来读取当前的CR3吗?
谢谢!
答案 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。