歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> Linux文化

主引導扇區釋疑


發信人: NightOwl (Owlet), 信區: Linux
標 題: 主引導扇區釋疑
發信站: BBS 水木清華站 (Sat Nov 20 06:50:43 1999)

主引導扇區釋疑

關鍵詞:引導扇區、主引導扇區、主引導記錄、硬盤分區表。

NightOwl
1999.11

-------------------------------------------------------------------
本文尚未完備,如有好的意見和建議歡迎與我聯系.
-------------------------------------------------------------------

很多朋友對於硬盤的主引導扇區裡的MBR(Main Boot Record)和DPT
(Disk Partition Table)的區別有些分不太清。於是我想把它寫個簡短的
介紹,希望能對這些朋友有點幫助。

引導扇區在每個分區裡都存在,但是我們常說的*主引導扇區*是硬盤的
第一物理扇區。它由兩個部分組成:即主引導記錄MBR和硬盤分區表DPT。在
總共512字節的主引導分區裡其中MBR占446個字節(偏移0--偏移1BDH),DPT
占64個字節(偏移1BEH--偏移1FDH),最後兩個字節“55,AA”(偏移1FEH
偏移1FFH)是分區的結束標志。大致的結構如下圖:

0000 |------------------------------------------------|
| |
| |
| Main Boot Record |
| |
| |
| 主引導記錄(446字節) |
| |
| |
| |
01BD | |
01BE |------------------------------------------------|
| |
01CD | 分區信息 1(16字節) |
01CE |------------------------------------------------|
| |
01DD | 分區信息 2(16字節) |
01DE |------------------------------------------------|
| |
01ED | 分區信息 3(16字節) |
01EE |------------------------------------------------|
| |
01FD | 分區信息 4(16字節) |
|------------------------------------------------|
| 01FE | 01FF |
| 55 | AA |
|------------------------------------------------|

圖一:主引導扇區結構圖

主引導記錄中包含了硬盤的一系列參數和一段引導程序。引導程序主要
是用來在系統硬件自檢完後引導具有激活標志的分區上的操作系統。它執行
到最後的是一條JMP指令跳到操作系統的引導程序去。這裡往往是引導型病
毒的注入點,也是各種多系統引導程序的注入點。但是由於引導程序本身完
成的功能比較簡單,所以我們可以完全地判斷該引導程序的合法性(看JMP
指令的合法性),因而也易於修復。象命令fdisk/mbr可以修復MBR和KV300
這類軟件可以查殺任意類型的引導型病毒,就是這個原因。

往下來是硬盤的分區表,由4個16字節的分區信息表組成。每個信息表的
結構如下:

偏移 長度 所表達的意義
0 字節 分區狀態: 如0-->非活動分區
80--> 活動分區
1 字節 該分區起始頭(HEAD)
2 字 該分區起始扇區和起始柱面
4 字節 該分區類型:如82--> Linux Native分區
83--> Linux Swap 分區
5 字節 該分區終止頭(HEAD)
6 字 該分區終止扇區和終止柱面
8 雙字 該分區起始絕對分區
C 雙字 該分區扇區數

最後的兩個標志“55 AA”是分區表的結束標志,如果這兩個標志被修改
(有些病毒就會修改這兩個標志),則系統引導時將報告找不到有效的分區表。

由上面的所列出的結構可以大致地了解主引導扇區的結構和用途。下面,
有一些關於主引導扇區的常見問題:

Q1、fdisk/mbr 會不會把硬盤的分區表破壞呀?
A: 從上面的土一我們可以看到fdisk/mbr是不會影響到DPT的。fdisk/
mbr只是把主引導分區裡的MBR部分重新寫過,而不會對DPT有任何破壞。

Q2、在Linux裡有一種方法可以恢復MBR是用如下的命令:
dd if=/boot/boot.NNNN of=/dev/hda bs=446 count=1
其中bs(buffer size)是指重寫的字節數。為什麼不是512
呢?主引導扇區是一個扇區(512字節呀)?
A: 答案是因為我們用上面的命令是為了修復可能被病毒修改了的主引導記
錄MBR,或者想把LILO卸載掉,而不是恢復整個主引導扇區。所以我們
只把主引導扇區的備份文件boot.NNNN的前446個字節重寫入主引導扇區。
boot.NNNN是我們在安裝Linux之前整個主引導分區的備份。如果我們把
512個字節全部寫入主引導扇區就可能會把安裝了Linux後改變了的硬盤
DPT表也破壞掉。那就壞事了。 :-)


linuxrat補充一些:=)...

MBR-> Main/Master Boot Record, 有些書上是寫成Master的.
我認為可以分成三個部分吧, MBR+DPT+MagicNumber(446+64+2=512)
這也就是為什麼進行MBR備份的時候要指定bs=512 或者 bs=1k, count=1的原因. 然後恢復時經常看到HOWTO裡面是bs=446 count=1. 這個446就是指令部分的恢復, 不是DPT的恢復. 往往MBR裡面的第一個指令是cli... 研究起來是比較有意思的.

有哪位大拿給大家把這446字節的指令給大家說一說吧. //bow, come on...


摘自:http://www.lisoleg.org


Copyright © Linux教程網 All Rights Reserved