freeldr簡直就是ntoskrnl的先鋒部隊,他為ntoskrnl做好了充分的環境准備
在freeldr將ntoskrnl.exe,hal.dll和其他相關的引導文件在內存中安置好了以後,freeldr將完成最後的使命,然後將cpu移交給ntoskrnl。
在移交CPU之前由freeldr將分頁機制建立好,也就是說在轉入ntoskrnl執行內核初始化之前,freeldr會先建立好分頁機制,以及將CPU帶入保護模式,看代碼。
位於(srcroot\boot\freeldr\freeldr\arch\i386)目錄的Loader.c文件,該文件中的函數
VOID
NTAPI
FrLdrStartup(ULONG Magic)
{
/* 關閉中斷*/
_disable();
/* Re-initalize EFLAGS */
Ke386EraseFlags();
/* 判斷啟動選項是否保護PAE模式 */
FrLdrGetPaeMode();
/* 初始化頁目錄*/
FrLdrSetupPageDirectory();
/* Initialize Paging, Write-Protection and Load NTOSKRNL */
FrLdrSetupPae(Magic);
}
而同文件中的FrLdrSetupPae(ULONG Magic)函數
則完成將前面設置好的頁表目錄地址寫入CR3寄存器並改變CR0寄存器的控制標志,轉入保護模式,然後進入ntoskrnl的入口函數,進行內核初始化階段。
今天就看到這裡。