【2021.03.31】PDE、PTE属性:US、PS、A、D

要点回顾

物理页的属性 = PDE属性 &(与运算) PTE属性

U/S位

U/S = 0:该物理页只允许特权用户访问。

U/S = 1:该物理页普通用户也可以访问。

实验

修改一个高2G线性地址的PDE/PTE属性,实现R3可读,比如:0x8003F00C。

#include "stdafx.h"
#include <windows.h>

int main(int argc, char* argv[])
{
    PDWORD p = (PDWORD)0x8003F00C;

    getchar();

    printf("读高2G内存地址:%x\n", *p);

    return 0;
}

以上代码如果直接执行将会报错。

如果将0x8003F00C这个地址的PDE与PTE的U/S位修改掉,再执行,就不会出错:

说明当前以一个普通用户的身份,已经可以读写高2G的内存地址了。

也就是说纯粹是页的限制。

P/S位

PS(PageSize)位,只对PDE有意义。

PS = 0:无PTE。

PS = 1:PDE直接指向物理页,低22位不需要再拆分,直接就是物理页的页内偏移。

线性地址只能拆成2段,且大小为4MB,俗称大页。

实验

分析0x8043F00C线性地址的PDE属性。

A位

是否被访问过(读或者写),访问过置1,即使只访问一个字节也会导致PDE、PTE的A位置1。

D位

是否被写过。

D = 0:没有被写过。

D = 1:被写过。

关于G、PWT、PCD位

此处暂时不做介绍,需要拥有控制寄存器以及TLB的知识才能继续来了解。

猜你喜欢

转载自blog.csdn.net/qq_18120361/article/details/115358992
ps
今日推荐