win7 實模式到保護模式的轉換是在哪一步做的?
01-25
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, 0MEMORY:207F2 mov ax, ds:1510hMEMORY:207F5 and ax, ax
MEMORY:207F7 jnz near ptr unk_86F
MEMORY:207FB push large 0MEMORY:20801 popfdMEMORY:20803 mov word ptr ds:1510h, 1MEMORY:20809 mov eax, ds:1514hMEMORY:2080D xor edx, edxMEMORY:20810 or edx, 1MEMORY:20814 and eax, 80000000hMEMORY:2081A jz near ptr unk_825MEMORY:2081E or edx, 80000000hMEMORY:20825 cliMEMORY:20826 lgdt fword ptr ds:1500hMEMORY:2082B lidt fword ptr ds:1508hMEMORY:20830 mov eax, cr0MEMORY:20833 or eax, edxMEMORY:20836 mov cr0, eaxMEMORY:20839 xchg bx, bxMEMORY:2083B nopMEMORY:2083C jmp short near ptr unk_83F推薦閱讀:
※為什麼電磁安全的概念沒有像網路安全一樣深入人心呢?
※一個失敗的合作!導致超過1.4億的Verizon用戶數據泄露
※[深入學習Web安全](3)Web層面的安全威脅
※機器的黎明 -- 第24屆DEF CON CTF總決賽亞軍隊員訪談
※如何與人工智慧和睦相處?它已經掌控了你的一切