为了访问内存页面,x86处理依次执行以下检查:
●描述符(或段)检查:通常要访问全局描述符表GDT,并检查段描述符segment descriptor。段描述符包含一个称为描述符权限级别DPL的值。DPL包含了调用进程所需的环ring编号。若DPL需求低于进程的ring级别(有时称为当前权限界别CPL),则访问被拒接而且内存检查终止。
●页目录检查:对整个页表(即整个内存页范围)需要检查用户/超级用户位。若该位被设置为0,则只有超级用户程序(ring 0、1、2)能够访问该内存页范围。若调用进程不是超级用户,则内存检查终止。若该位为1,则任何程序都能访问该内存页范围。
●页面检查:对单个内存页面执行检查。若已经成功通过页目录检查,则对正在处理的单个页面进行页检查。类似于页目录,对每个页面都要检查一个用户/超级用户位。若该位为0,则只有超级用户程序(ring 0、1、2)能够访问该页;若该位为1,则任何程序都能访问该页。只有当进程能够到达并通过本检查并且没有任何禁止,它才能最终访问到内存页。
PS:摘录自《Windows内核的安全防护》
阅读(426) | 评论(0) | 转发(0) |