win7 實模式到保護模式的轉換是在哪一步做的?

win7啟動過程:

1.MBR 載入 bootmgr,

2.bootmgr裝載winload.exe,

3.winload.exe運行ntoskrnl

如果使用IDA+vmware來調試windows7的啟動過程,應該在什麼時候切換為32位反彙編呢(即什麼時候從實模式轉換到保護模式)


謝邀。

Win7其實不太了解,了解最多的是XP。

XP實現切換的動作是在NTLDR里完成的,但跟你理解的不一樣的是,不是說一下子切換到保護模式就OK了,而是在實模式和保護模式之間來回切換很多次。

原因是:

NTLDR里是沒有硬碟驅動的,讀盤是通過INT 13實現的,而INT 13隻在實模式下能用,怎麼辦?

所以NTLDR先算出來要讀的扇區的位置(在保護模式下),然後切換到實模式調用INT 13,讀完以後再返回回來。

因為要頻繁調用INT 13,所以會在保護模式和實模式之間切換多次,這種設計從Win2000開始到XP一直都是這樣的,因為Win2000和NT4有源碼泄露,去看一下就明白了。如果是XP和Win7混裝(先裝XP),也有類似的動作。

直到處理完所有讀盤請求以後,才徹底切換到保護模式。

Win7的情況不了解,個人認為bootmgr里會有切換的動作,但也不排除像XP那樣來回切換幾次才能徹底完成讀盤動作。

winload本身是一個32/64位可執行程序(根據操作系統系統版本不同有區別),那麼一旦控制權交給winload,操作系統已經完全進入保護模式了。

從目前得到的信息上還無法判斷winload在載入驅動文件時是否會切換回實模式,因為winload里所有與設備訪問的函數都是指針。


就是在bootmgr裡面的。這玩意是個16位和32位的混合體,前半段是16位,把頁表什麼準備好就跳到32位開始擼了


bootmgr被載入到0x20000處,經過一些準備步驟之後會通過如下代碼進入保護模式:

MEMORY:207EE enter 0, 0

MEMORY:207F2 mov ax, ds:1510h

MEMORY:207F5 and ax, ax

MEMORY:207F7 jnz near ptr unk_86F

MEMORY:207FB push large 0

MEMORY:20801 popfd

MEMORY:20803 mov word ptr ds:1510h, 1

MEMORY:20809 mov eax, ds:1514h

MEMORY:2080D xor edx, edx

MEMORY:20810 or edx, 1

MEMORY:20814 and eax, 80000000h

MEMORY:2081A jz near ptr unk_825

MEMORY:2081E or edx, 80000000h

MEMORY:20825 cli

MEMORY:20826 lgdt fword ptr ds:1500h

MEMORY:2082B lidt fword ptr ds:1508h

MEMORY:20830 mov eax, cr0

MEMORY:20833 or eax, edx

MEMORY:20836 mov cr0, eax

MEMORY:20839 xchg bx, bx

MEMORY:2083B nop

MEMORY:2083C jmp short near ptr unk_83F


推薦閱讀:

為什麼電磁安全的概念沒有像網路安全一樣深入人心呢?
一個失敗的合作!導致超過1.4億的Verizon用戶數據泄露
[深入學習Web安全](3)Web層面的安全威脅
機器的黎明 -- 第24屆DEF CON CTF總決賽亞軍隊員訪談
如何與人工智慧和睦相處?它已經掌控了你的一切

TAG:信息安全 | 系統安全 | 操作系統內核 |