zoukankan      html  css  js  c++  java
  • 保护模式阶段测试说明

    保护模式阶段测试说明

    感谢hambaga师傅的博客

     要求

      给定一个线性地址,和长度读取内容

     这个其实就是造轮子,先咕咕咕了

    申请长度为100的DWORD的数组,且每项用该项的地址初始化

    // Task_Segment.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include<windows.h>
    
    DWORD* arr;
    
    DWORD* GetPDE(DWORD addr)
    {
        return (DWORD*)(0xc0600000+((addr>>18)&0x3ff8));
    }
    
    DWORD* GetPTE(DWORD addr)
    {
        return (DWORD*)(0xc0000000+((addr>>9)&0x7ffff8));
    }
    
    __declspec(naked) void func()
    {
        __asm
        {
            pushad
            pushfd
        }
        *GetPTE(0x1000)|=*GetPTE((DWORD)arr);
        __asm
        {
            popfd
            popad
            iretd
        }
    }
    
    int main(int argc, char* argv[])
    {
    
        arr=(DWORD*)VirtualAlloc(0,0x1000,MEM_COMMIT,PAGE_READWRITE);
        int i=0;
        for(i=0;i<100;i++)
        {
            arr[i]=(DWORD)(arr);
        }
        printf("在IDT表构建中断门,请在windbg中执行下面的指令:
    ");
        printf("eq 8003f500 %04xee00`0008%04x",(DWORD)func>>16,(DWORD)func&0x0000ffff);
        getchar();
        __asm int 0x20
    
        unsigned long* p;
        p=(DWORD*)(0x1000);
    
        //printf("%x
    ",p);
    
        for(i=0;i<100;i++)
        {
            printf("%x:%x
    ",i,p[i]);
        }
        getchar();
        return 0;
    }
  • 相关阅读:
    解释之前遗留的方法覆盖问题
    多态在开发中的作用
    多态的基础语法
    Go 统计汉子字符
    Go map
    Go make和new的区别
    Go 指针
    Go 切片
    Go数组
    Go中交换两个值类型
  • 原文地址:https://www.cnblogs.com/pppyyyzzz/p/13896649.html
Copyright © 2011-2022 走看看