linux引導程式為什麼要把自己載入到記憶體的7c00h這個特定的地方?

來源:互聯網
上載者:User

系統啟動過程簡介

系統啟動過程主要由一下幾步組成(以硬碟啟動為例):

  1. 開機;
  2. BIOS 加電或按reset鍵後都要進行系統複位,複位後指令地址為 0ffff:fff0,這個地方只有一條JMP指令, 跳轉到系統自檢 ( Power On Self Test -- POST )程式處;
  3. 系統自檢完成後,將硬碟的第一個扇區 (0頭0道1扇區, 也就是Boot Sector)讀入記憶體位址 0000:7c00 處;
  4. 檢查 (WORD) 0000:7dfe 是否等於 0xaa55, 若不等於則轉去嘗試其他啟動介質, 如果沒有其他啟動介質 則顯示 "No ROM BASIC" 然後死機;
  5. 跳轉到 0000:7c00 處執行 MBR 中的程式;
  6. MBR程式 首先將自己複製到 0000:0600 處, 然後繼續執行;
  7. 在主要磁碟分割表中搜尋標誌為活動的分區,如果沒有發現使用中的磁碟分割或有不止一個使用中的磁碟分割, 則轉停止;
  8. 將使用中的磁碟分割的第一個扇區讀入記憶體位址 0000:7c00 處;
  9. 檢查 (WORD) 0000:7dfe 是否等於 0xaa55, 若不等於則 顯示 "Missing Operating System" 然後停止, 或嘗 試磁碟片啟動或;
  10. 跳轉到 0000:7c00 處繼續執行特定系統的啟動程式;
  11. 啟動系統...

  以上步驟中 2,3,4,5 步是由 BIOS 的引導程式完成. 6,7,8,9,10步由MBR中的引導程式完成.

Boot Sector 結構簡介

  1. Boot Sector 的組成

  Boot Sector 也就是硬碟的第一個扇區, 它由 MBR (Master Boot Record),DPT (Disk Partition Table) 和 Boot Record ID(Magic Number) 三部分組成。

  MBR 又稱作主引導記錄,佔用 Boot Sector 的前 446 個位元組 ( 0 to 0x1BD ),包含了硬碟的一系列參數和一段系統主引導程式。引導程式主要是用來在系統硬體自檢完後負責從使用中的磁碟分割中裝載並運行系統引導程式(引導作業系統)。它的最後一條執行語句是一條JMP指令,跳到作業系統的引導程式去。這裡往往是引導型病毒的注入點,也是各種多系統引導程式的注入點。但是由於引導程式本身完成的功能比較簡單,所以我們完全可以判斷該引導程式的合法性(比如看JMP指令的合法性),因而也易於修複。象命令fdisk/mbr可以修複MBR和KV300這類軟體可以查殺任意類型的引導型病毒,就是這個道理。
  DPT 即主要磁碟分割表,佔用 64 個位元組 (0x1BE to 0x1FD),記錄了磁碟的基本分區資訊。主要磁碟分割表分為四個分區項, 每項 16 位元組, 分別記錄了每個主要磁碟分割的資訊(因此最多可以有四個主要磁碟分割)。
  Boot Record ID 即引導區標記,佔用兩個位元組 (0x1FE and 0x1FF), 對於合法引導區, 它等於 0xAA55, 這是判別引導區是否合法的標誌.
  Boot Sector 的具體結構如所示:

0000 |------------------------------------------------|
  | |
  | |
  | Master Boot Record |
  | |
  | |
  | 主引導記錄(446位元組) |
  | |
  | |
  | |
  01BD | |
  01BE |------------------------------------------------|
  | |
  01CD | 分區資訊 1(16位元組) |
  01CE |------------------------------------------------|
  | |
  01DD | 分區資訊 2(16位元組) |
  01DE |------------------------------------------------|
  | |
  01ED | 分區資訊 3(16位元組) |
  01EE |------------------------------------------------|
  | |
  01FD | 分區資訊 4(16位元組) |
  |------------------------------------------------|
  | 01FE | 01FF |
  | 55 | AA |
  |------------------------------------------------|

硬碟MBR主引導程式碼分析

  一程式流程

  (開機磁區是指硬碟相應分區的第一個扇區,是和作業系統有關的,作業系統的引導是由它來完成的;而MBR主引導程式並不負責引導作業系統,MBR是和作業系統無關的,他的任務是把控制權轉交給作業系統的引導程式.)

  1 將程式碼由0:7C00H移動到0:0600H(注,BIOS把MBR放在0:7C00H處)
  2 搜尋可引導分區,即80H標誌
  成功:goto 3
  失敗:跳入ROM BASIC
  無效分區表:goto 5
  3 讀開機磁區
  失敗:goto 5
  成功:goto 4
  4 驗證開機磁區最後是否為55AAH
  失敗:goto 5
  成功:goto 6
  5 列印錯誤進入無窮迴圈
  6 跳到0:7C00H進行下一步啟動工作

閱讀全文

類別:預設分類 查看評論

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.