保护模式(五):10-10-12分页(一)

CR3-->PDT|PDE0|-->PTT0|PTE0|-->物理内存
|PDE1| |PTE1|
|PDE2| |PTE2|

将一个线性地址分为10,10,12三部分,分别为PDT,PTT,物理内存的偏移

如果为大页则分为10,22两部分,分别为PDT,物理内存的偏移

CR3-->PDT-->物理内存

实验一:直接修改物理内存

先在操作系统中改为10-10-12分页

修改boot文件中/noexecute=optin为/execute=optin

测试代码

#include "stdafx.h"
#include <windows.h>
//401020
void __declspec(naked)Test(){
    __asm{
        iretd
    }

}

int main(int argc, char* argv[])
{
    __asm{
        //int 0x20
    }
    printf("%x\n",*(DWORD*)0x401020);
    getchar();
    printf("%x\n",*(DWORD*)0x401020);
    getchar();
    return 0;
}

//401020
//0000 0000 01        1*4
//00 0000 0001        1*4
//0000 0010 0000    20

查看CR3

!process 0 0

查看PDT

查看PTT

kd> !dd 030a3000+4  //067为PDE属性

查看物理内存

修改物理内存

!ed c5c0020 ffffffff

实验二:为0地址挂物理页

测试代码

#include "stdafx.h"
#include <windows.h>
//401020
void __declspec(naked)Test(){
    __asm{
        iretd
    }

}

int main(int argc, char* argv[])
{
    __asm{
        //int 0x20
    }
    getchar();
    printf("%x\n",*(DWORD*)0x0);
    getchar();
    return 0;
}

0的PTE为0

挂一个物理页,这里用的401020处的

 

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