保护模式阶段测试说明
保护模式阶段测试说明
要求
给定一个线性地址,和长度读取内容
这个其实就是造轮子,先咕咕咕了
申请长度为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中执行下面的指令:\n"); printf("eq 8003f500 %04xee00`0008%04x",(DWORD)func>>16,(DWORD)func&0x0000ffff); getchar(); __asm int 0x20 unsigned long* p; p=(DWORD*)(0x1000); //printf("%x\n",p); for(i=0;i<100;i++) { printf("%x:%x\n",i,p[i]); } getchar(); return 0; }