程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> freeldr引導的最初階段

freeldr引導的最初階段

編輯:.NET實例教程

[分析環境reactos0.3.1 ]

 freeldr多系統引導程序

 freeldr是一個多操作系統的引導程序,在reactos中是如何工作的?

一開始當然是MBR(主引導記錄)還不知道這個東西是如何工作。以後在去看看這方面的資料

然後就是引導扇區。BiOS讀取引導扇區512個字節,(當然引導扇區的這512個字節信息中的最後還必須有引導簽名),到0000:7C00處,然後計算機又從這裡開始執行。

那麼針對不同的分區,(FAT12/16/32還有其他分區)給出了不同的引導扇區程序,當然先看看FAT32的。因為這個比較單純,(好像FAT12不知道包括FAT16不,要分成幾個部分來加載freeldr.sys這個引導文件。)一次性讀取 freeldr.sys這個引導文件到內存。

如果是FAT32引導扇區的程序,會在分區上查找 freeldr.sys並將他加載到0000:7E00 這個地址,然後跳到0000:8000地址開始執行freeldr的匯編代碼。

freeldr.sys的文件結構是前512個字節是fathelp.asm這個文件在srcroot\boot\freeldr\freeldr\arch\i386文件夾中,作用是幫助FAT12/16分區程序完成加載freeldr.sys的後續工作,而緊挨作這512字節之後的是arch.S文件在srcroot\boot\freeldr\freeldr\arch\i386\,然後還有很多文件跟在後面,不過主要關系這兩個文件在freeldr.sys中的布局。

完成freeldr.sys文件的加載後跳過來到0000:8000這個地址處開始執行應該就是RealEntryPoint這個函數。(具體為什麼是這個函數?莫非因為這是文件中的第一個函數,然後文件布局經過編譯器編譯後又緊靠作那512個字節即0000:7E00 +512=0000:8000還是有其他原因?)但是我想應該只有這個函數的可能性最大了。

然後這個函數RealEntryPoint完成以下工作

  1. 配置段寄存器
  2. 建立堆棧
  3. 切換成保護模式
  4. 還有一些其他操作
  5. 然後調用_BootMain

這個BootMain函數位於srcroot\reactos-0.3.1\boot\freeldr\freeldr\Freeldr.c文件,終於可以使用C語言了

後面還有幾條其他指令,也許已經無關緊要(無關緊要那還寫它干什麼?^O^ 當然有他的道理,只是現在我不需要了解)

 進入了BootMain函數那就想干什就干什麼。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved