zoukankan      html  css  js  c++  java
  • 保护模式(五):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
    ",*(DWORD*)0x401020);
        getchar();
        printf("%x
    ",*(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
    ",*(DWORD*)0x0);
        getchar();
        return 0;
    }

    0的PTE为0

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

  • 相关阅读:
    mfc启动画面
    个人冲刺第十天
    个人冲刺第九天
    个人冲刺第八天
    个人冲刺第七天
    个人冲刺第六天
    新一周冲刺计划2
    新一周冲刺
    创意1
    团队绩效与目标
  • 原文地址:https://www.cnblogs.com/harmonica11/p/14159211.html
Copyright © 2011-2022 走看看