保护模式(九):挂物理页

#include "stdafx.h"
#include <windows.h>

DWORD* buf;

void __declspec(naked) Test(){
    __asm{
        pushad
        pushfd
    }
    *(unsigned __int64*)(((0x0000>>9)&0x7FFFF8)+0xC0000000)=*(unsigned __int64*)((((DWORD)buf>>9)&0x7FFFF8)+0xC0000000);
    __asm{
        popfd
        popad
        iretd
    }
}

int main(int argc, char* argv[])
{
    buf=(DWORD*)VirtualAlloc(NULL,0x1000,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
    for(int i=0;i<100;i++){
        *(buf+i)=(DWORD)(buf+i);
    }
    printf("%x
",(DWORD)Test);
    getchar();
    __asm int 0x20
    for(i=0;i<100;i++)
        printf("%x
",*((DWORD*)0x0000+i));
    getchar();
    return 0;
}

原文地址:https://www.cnblogs.com/harmonica11/p/14186110.html