17 PDE PTE属性(P位 R/W位)

1、物理页属性
物理页属性 = PDE属性 & PTE属性
在这里插入图片描述
2、P位控制物理页是否可以访问,P位为0则不可以访问,如上篇我们看到的PDE和PTE最后一位十六进制很多是7,对应二进制111,所以是可以访问的

3、R/W位为读写位,为1表示可读可写,为0表示只读
下面我们来做一个修改C语言中常量区的值的实验来体会一下读写位。

#include <stdio.h>

int main()
{
   char* str = "Hello World";
   int dwVal;
   printf("线性地址:%x", str);
   getchar();  
   dwVal = (int)str;
   *(char*)dwVal = 'M';
   printf("修改后的值为:%s", str);
   return 0;
}

我们首先直接执行该程序报如下错误:
在这里插入图片描述
接下来我们修改程序中改地址的R/W位,来看一下结果,首先我们运行程序到如下图停下:
在这里插入图片描述
接下来我们用Windbg修改属性位:
! process 0 0
在这里插入图片描述
!dd 2dda1004 这里我们看到PDE还是可读可写的,这里就不用改
在这里插入图片描述
!dd 2de69080 这里我们看到PTE为可读不可写,所以我们需要把这里改成可读可写,完成我们的写操作
在这里插入图片描述
!ed 2de69080 2a30d027
!dd 2de69080
修改并查看是否修改成功
在这里插入图片描述
运行虚拟机
在这里插入图片描述
切换到虚拟机中回车继续执行程序,得到如下结果,我们的修改成功了:
在这里插入图片描述
可见限制我们修改的是PTE属性,并不是VC6

猜你喜欢

转载自blog.csdn.net/lifeshave/article/details/86655885