保护模式(六):10-10-12分页(二)
物理页的属性=PDE的属性&PTE的属性(后三个字节为属性)
P:P=1为有效物理页
R/W:R/W=1可读可写 R/W=0只读
U/S:U/S=0 特权用户 U/S=1 普通用户
PS:PS=1时PDE直接指向物理页
A:A=1被访问过
D:D=1被写过
实验一:修改字符串(R/W)
测试代码
#include "stdafx.h"
#include <windows.h>
int main(int argc, char* argv[])
{
char* str="Hello World";
printf("%x\n",str);
getchar();
*str=0x61;
printf("%s\n",str);
getchar();
return 0;
}
//423fb4
//0000 0000 01 1*4
//00 0010 0011 23*4
//1111 1011 0100 fb4
kd> !dd 08285000+4
# 8285004 05cf8067 00000000 00000000 00000000
//属性067
0000 0110 0111 R/W=1
kd> !dd 05cf8000+4*23 # 5cf808c 0c3d5025 00000000 027d6067 05afc225
//属性025
0000 0010 0101 R/W=0
修改属性
kd> !ed 5cf808c 0c3d5027
实验二:读高地址(U/S)
测试代码
#include "stdafx.h"
#include <windows.h>
int main(int argc, char* argv[])
{
getchar();
printf("%x\n",*(DWORD*)0x8003f030);
getchar();
return 0;
}
//8003f030
//1000 0000 00 200*4
//00 0011 1111 3f*4
//0000 0011 0000 30
kd> !dd 00db9000+200*4 # db9800 0003b163 004001e3 0003e163 010001e3
//属性163 0001 0110 0011 U/S=0
kd> !dd 0003b000+3f*4
# 3b0fc 0003f163 00040103 00041103 00042163
//属性163
0001 0110 0011 U/S=0
修改属性
kd> !ed 3b0fc 0003f167
kd> !ed db9800 0003b167