天天看点

之七:.情景分析之越界访问

情景分析之越界访问

注:本文展示的代码来自2.4.0版本的内核,入口函数do_page_fault定义在<arch/mm/fault.c>中。

总体处理流程:

之七:.情景分析之越界访问

备注:

①读取CR2寄存器获取出错地址

CPU在发出页面异常时,会将对应的地址存到CR2寄存器中,在页面异常的处理程序中就可以从CR2中读取到出错地址。因为要读取CR2寄存器,C语言无法做到,只能通过嵌入式汇编实现。

②当前进程的用户空间尚未建立

前面讲过,每个进程都对应一个mm_struct结构,该结构是对进程整个用户空间的抽象。在每个进程的进程控制块即task_struct结构体中,有一个指针(mm)指向该进程的mm_struct结构。如果该指针为NULL,即表示当前进程的用户空间尚未建立(在后面讲进程调度与切换时,我们还会看到另一个情况:内核进程的mm指针也为NULL)。