首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 組合語言

Windows 98 SE 主開機記錄(MBR)十六進位碼註解分析

     編輯:組合語言

MBR 基礎知識

主開機記錄(Master Boot Record, MBR)位於硬碟第 0 柱面、第 0 磁頭、第 1 扇區(LBA 0),大小 512 位元組。BIOS POST 完成後,將其載入記憶體 0000:7C00h 並跳轉執行。MBR 責任:掃描分區表、尋找啟動分區、讀取該分區的啟動扇區(VBR)到 7C00h 並轉移控制權。

完整十六進位傾印與關鍵區塊註解

0000:7C00  33 C0 8E D0 BC 00 7C FB 50 07 50 1F FC BE 1B 7C  3...|.{P.P...|
0000:7C10  BF 1B 06 50 57 B9 E5 01 F3 A4 CB BE BE 07 B1 04  ...PW.........
0000:7C20  38 2C 7C 09 75 15 83 C6 10 E2 F5 CD 18 8B 14 8B  8,|.u.........
0000:7C30  EE 83 C6 10 49 74 16 38 2C 74 F6 BE 10 07 4E AC  ....It.8,t..N.
0000:7C40  3C 00 74 FA BB 07 00 B4 0E CD 10 EB F2 89 46 25  <.t........F%
0000:7C50  96 8A 46 04 B4 06 3C 0E 74 11 B4 0B 3C 0C 74 05  ..F.4.<.t.4.<.t
0000:7C60  3A C4 75 2B 40 C6 46 25 06 75 24 BB AA 55 50 B4  :.u+@.F%.u$.UP.
0000:7C70  41 CD 13 58 72 16 81 FB 55 AA 75 10 F6 C1 01 74  A..Xr...U.u...t
0000:7C80  0B 8A E0 88 56 24 C7 06 A1 06 EB 1E 88 66 04 BF  ....V$.....f..
0000:7C90  0A 00 B8 01 02 8B DC 33 C9 83 FF 05 7F 03 8B 4E  .......3.....N
0000:7CA0  25 03 4E 02 CD 13 72 29 BE 46 07 81 3E FE 7D 55  %.N..r).F..>.}U
0000:7CB0  AA 74 5A 83 EF 05 7F DA 85 F6 75 83 BE 27 07 EB  .tZ......u..'.
0000:7CC0  8A 98 91 52 99 03 46 08 13 56 0A E8 12 00 5A EB  ...R..F..V...Z.
0000:7CD0  D5 4F 74 E4 33 C0 CD 13 EB B8 00 00 00 00 00 00  .Ot.3.........
0000:7CE0  56 33 F6 56 56 52 50 06 53 51 BE 10 00 56 8B F4  V3.VVRP.SQ..V..
0000:7CF0  50 52 B8 00 42 8A 56 24 CD 13 5A 58 8D 64 10 72  PR..B.V$..ZX.d.r
0000:7D00  0A 40 75 01 42 80 C7 02 E2 F7 F8 5E C3 EB 74 49  .@u.B......^..tI
0000:7D10  6E 76 61 6C 69 64 20 70 61 72 74 69 74 69 6F 6E  nvalid partition
0000:7D20  20 74 61 62 6C 65 00 45 72 72 6F 72 20 6C 6F 61   table.Error loa
0000:7D30  64 69 6E 67 20 6F 70 65 72 61 74 69 6E 67 20 73  ding operating s
0000:7D40  79 73 74 65 6D 00 4D 69 73 73 69 6E 67 20 6F 70  ystem.Missing op
0000:7D50  65 72 61 74 69 6E 67 20 73 79 73 74 65 6D 00 00  erating system..
0000:7D5E  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0000:7D6E  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0000:7D7E  00 00 00 8B FC 1E 57 8B F5 CB 00 00 00 00 00 00  ....{.W.uK......
0000:7D8E  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0000:7D9E  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0000:7DAE  00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 01  ................
0000:7DBE  01 00 0B 7F 7F C8 3F 00 00 00 41 3B 38 00 00 00  ....H?...A;8...
0000:7DCE  41 C9 05 7F FF 13 80 3B 38 00 80 BA 28 00 00 00  A.....;8...(...
0000:7DDE  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0000:7DEE  00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA  ..............U.

關鍵區塊詳細註解

🔹 註解 1:多語言提示訊息保留區(7D5Eh–7D82h)

此 36 位元組區域預留給多語言版本的錯誤訊息(如中文版「無效分區表」、「載入作業系統失敗」等)。但 BIOS 此時仍在實模式,未載入中文字型,若直接顯示中文會變亂碼。這反映早期微軟設計的疏漏——同樣問題也出現在 VxD 載入階段的錯誤訊息顯示。

🔹 註解 2:MBR 執行代碼結束點(7D83h)

位址 7D83h 的字節 CB 對應指令 RETF(遠程返回)。此處返回到 0000:7C00h,即已載入的啟動扇區(VBR)。若要在 MBR 植入自定義代碼,必須避開此指令及其後續關鍵資料區。

🔹 註解 3:未使用空間(7D8Ah–7DBDh)

約 50 位元組的零填充區,可用於植入自定義啟動代碼(如 Bootkit、多重啟動管理器)。

🔹 註解 4:四組分區表項目(7DBEh–7DFDh)

每項 16 位元組,共 64 位元組,結構如下:

偏移大小說明
00h1 Byte啟動指示符(80h=啟動中,00h=非啟動)
01h1 Byte起始磁頭
02h1 Byte起始扇區(bit 0-5)+ 柱面高 2 位(bit 6-7)
03h1 Byte起始柱面低 8 位
04h1 Byte系統 ID(0Bh/0Ch/0Eh=FAT32 LBA,07h=NTFS,83h=Linux 等)
05h1 Byte結束磁頭
06h1 Byte結束扇區/柱面(編碼同起始)
07h1 Byte結束柱面
08h4 Bytes相對起始扇區(LBA)
0Ch4 Bytes分區總扇區數

範例中第一項(7DBEh):啟動中、系統 ID=0Bh (FAT32)、相對起始 LBA=3Fh、總扇區數=383B41h。

🔹 註解 5:MBR 魔術數字(7DFEh–7DFFh)

55 AA(小端序儲存為 AA 55)。BIOS 檢查此標誌決定該扇區是否為有效 MBR,無效則不載入執行。

補充說明

  • Win98 SE 的 MBR 已支援 INT 13h 擴展功能(AH=42h,LBA 48-bit 讀取),可突破 8.4GB 限制。
  • 對於系統 ID 0Bh/0Ch/0Eh(FAT32 LBA),MBR 會嘗試用 INT 13h AH=42h 讀取;失敗則回退傳統 CHS 模式(AH=02h)。
  • 讀取啟動扇區最多重試 10 次;對 FAT32 分區,第 6 次起改讀備份啟動扇區(位於啟動扇區後 6 扇區)。

結語

理解 MBR 結構與代碼流程,是開發開機管理工具、分析 Bootkit、進行資料救援的基礎。本文提供的註解版十六進位碼可作為進一步逆向工程的參考地圖。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved