學習筆記(五):10-10-12分頁(一)
阿新 • • 發佈:2020-12-24
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處的