保護模式階段測試

2021-09-21 01:40:15 字數 2055 閱讀 9139

說說思路吧,如果給出的線性位址+讀取的長度沒有超過0x1000。那麼這種情況很好處理,判斷pde和pte的p都為1就行了

// readpageattr.cpp : 定義控制台應用程式的入口點。

//呼叫門描述符 eq 8003f048 0041ec00`00081087

#include

"stdafx.h"

#include

dword dwpdt_index=0;

dword dwptt_index=0;

dword dwpageindex=0;

dword result=0;

bool bread=

false

;//位址是否可讀標誌 true為可正常讀

void

callgate()

;void

_declspec

(naked)

test()

}void

parsepage

(dword dwaddr)

void

callgate()

;*(dword*

)&buffer[0]

=0;*

(word*

)&buffer[4]

=0x4b

; _asm }

bool

readmemory

(out void

*buffer,in dword dwaddr,in dword

dwlength)}}

else

}return

false;}

int_tmain

(int argc, _tchar* ar**)

;printf

(,test)

;int

*p=(

int*

)0x11ffc

;*p=

0x12345678

; bool bret=

readmemory

(buf,

0x11ffc,4

);if(bret)

}else

getchar()

;return0;

}

**記錄一下,兩道題肝了我5個小時,還好做出來了 **

// protect2.cpp : 定義控制台應用程式的入口點。

//呼叫門描述符 eq 8003f048 0041ec00`00081087

#include

"stdafx.h"

#include

dword dwpdt_index=0;

dword dwptt_index=0;

dword dwpageindex=0;

dword dwpde;

dword dwpte;

void

callgate()

;*(dword*

)&buffer[0]

=0;*

(word*

)&buffer[4]

=0x4b

; _asm }

void

_declspec

(naked)

test()

}void

parsepage

(dword dwaddr)

int_tmain

(int argc, _tchar* ar**)

parsepage

((dword)dwaddr)

;//3:定義乙個指標,指向0x1000 使用指標列印出陣列的值。

dwaddr=

(dword*

)0x1000

;for

(int i=

0;i<

100;i++

)getchar()

;return0;

}

滴水保護模式測試

工具 vc 6 windbg 注意點 下面採用的都是pae分頁 2 9 9 12 公式 pde dwaddr 21 3 0x3ff8 0xc0600000 2 9 pte dwaddr 12 3 0x7ffff8 0xc0000000 2 9 9 第一題難點在於計算pde pte include s...

進入保護模式

本文為 每個描述符佔8位元組,下圖中,上面位高32位,下面為低32位 disk boot ata channel 0 first hd cd on channel 0 type of disk image這個選項是vpc,我用2.6.2配置時選vpc無法啟動,得選flat才可以,2.6.0貌似選vp...

進入保護模式

以下圖2,圖4和圖5截自intel手冊 每個描述符佔8位元組,下圖中,上面位高32位,下面為低32位 disk boot ata channel 0 first hd cd on channel 0 type of disk image這個選項是vpc,我用2.6.2配置時選vpc無法啟動,得選fl...