保护模式(六):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

 

posted @ 2020-12-24 20:19  Harmonica11  阅读(79)  评论(0编辑  收藏  举报