我正在编写一个内核驱动程序,旨在分析Linux内核页表。
我发现无论何时我从驱动程序中读取CR3寄存器,每次读取都会产生不同的CR3内容!
为什么会这样呢?因为驱动程序在内核模式下执行,所以CR3需要指向内核页目录(对吧?),那么为什么CR3每次都在变化呢?
如果CR3不断变化,驱动程序如何正确地访问内存,达到预期的效果呢?
CR3是指页面目录指针,它会在地址空间发生变化时进行更改。没有单一的“内核”内存空间。在大多数(或所有?)内存模型中,您所看到的CR3值将特定于您所处的地址空间上下文(例如,您正在处理系统调用的进程等等)。