DOS分區的分析

Microsoft將使用DOS分區體系的磁盤稱爲“主引導記錄(Master Boot Recorder,MBR)”。很多人都認爲"DOS分區"就是指Windows下的分區,我原先也是這麼認爲的。其實DOS分區並不是以操作系統而劃分的分區體系,而是指使用“主引導記錄(MBR)”的分區體系。Microsoft DOS、Linux以及基於IA32平臺的FreeBSD和OpenBSD等操作系統都是使用DOS分區體系的。DOS分區是最常見的也是最爲複雜的分區體系。

主引導記錄(MBR)

對於使用DOS分區體系的磁盤,第一個扇區(0號扇區,512字節)爲存放主引導記錄(MBR)的扇區。當計算機啓動並完成自檢後,首先需找磁盤的MBR扇區並讀取其中的記錄引導,然後將系統控制權交給它。所以,如果MBR損壞的話,計算機將無法正常加載操作系統。

1. MBR數據結構

MBR由446個字節的引導代碼、64個字節的主分區表以及2個字節的簽名值“55AA”組成。我們可以使用Winhex,以16進制的形式來查看磁盤上的所有信息。注意打開的爲物理磁盤如圖1所示,圖1即爲我使用的計算機的C盤的第一個分區的數據(MBR)。注意當打開真實的磁盤時,注意不要隨意修改其中的數據,尤其是MBR中的數據,否則會導致計算機系統無法正常啓動。

 

                                   圖1 加載物理磁盤                                                                                                 圖2 主引導記錄扇區數據

MBR由三部分組成,分別爲

  • 引導代碼:MBR獲得系統的控制權後,引導代碼對其他代碼信息進行檢查,如查看是否有“55AA”有效標記,並進一步引導系統。
  • 分區表:描述磁盤內的分區情況。
  • “55AA”有效標誌:“55AA”標誌通知系統,該MBR扇區是否有效,如果該標誌丟失或損壞,磁盤將會顯示爲未初始化。
扇區的數據結構如表1所示

字節偏移 字節數 描述
00~1BD 446 引導代碼
1CE~1CD 16 分區表項1
1CE~1DD 16 分區表項2
1DE~1ED 16 分區表項3
1EE~1FD 16 分區表項4
1FE~1FF 2 簽名值(55AA)

具體含義解釋如下:

(1) 0x00~0x1BD:446個字節,引導代碼區域,包含一段指令,用以通知計算機如何訪問分區表並定位操作系統的位置。

  • 主引導代碼是一段非常重要的代碼,因爲它是磁盤上最先裝入內存並執行的代碼。所以有很多引導型的病毒把自己嵌入到主引導代碼中,從而實現首先運行的目的。
  • 利用引導代碼可以實現多系統引導。大多數用戶是使用Windows後,在其上安裝第二個操作系統。其實是MBR中的主引導程序先加載Windows引導代碼,然後由Windows引導代碼再呈現給用戶一個操作系統選擇界面。還有一種方法是改變MBR中的引導代碼,修改後的引導代碼會直接呈現給用戶一個選擇列表。

(2)0x1BE~0x1FD:64個字節,4個分區表項,每個表項佔用16個字節。每個表項描述一個DOS分區,最多可以描述4個主分區。使用過Linux的fdisk對硬盤進行分區的應該會注意到,最多隻能創建4個主分區。

  • 分區表項與物理分區沒有順序上的對應關係,也就是第一個分區表項不一定會對應第一個分區。
  • 操作系統會完整的對4個分區表項都進行檢索,根據每個分區表項的描述定位物理分區。

(3)0x1FE~0x1FF:2個字節,有效結束標誌“55AA”。如果沒有這個標籤,操作系統會認爲該磁盤沒有初始化。

2. 分區表項的數據結構

    分區表區域共佔用64個字節,一個分區表項由以下幾個部分組成;

  • 是否可引導標誌
  • 分區起始CHS
  • 分區類型
  • 分區結束CHS
  • 分區起始LBA
  • 分區大小扇區數

    具體見下表2

偏移 字節數 描述
00~00 1 可引導標誌,00不可引導;0x80可引導
01~03 3 分區起始CHS
04~04 1 分區類型
05~07 3 分區結束CHS地址
08~0B 4 分區起始LBA(小端順序)
0C~0F 4 分區大小扇區
  • 0x00~0x00:可引導標誌,只有兩種可能值,0x80爲可引導,0x00爲不可引導。
  • 0x01~0x03:3個字節,分區的起始CHS地址。第一個字節用於記錄分區起始磁頭號;第二個字節低6位記錄分區起始扇區號;第二個字節的高兩位作爲起始柱面號的高兩位,第三個字節的8個bit作爲分區起始柱面號的低8位。
  • 0x04~0x04:分區類型標識。分區類型標識表明其描述的分區類型,如FAT、NTFS、Linux、FreeBSD等。如NTFS的類型值爲0x07,如果將其改爲0x17,重新進入Windows後,Windows將不再爲其分配盤符,也就無法在“我的電腦”中,看到這個分區。
  • 0x05~0x07:分區結束CHS地址,與分區起始CHS地址結構相同。
  • 0x08~0x08:4個字節,分區起始LBA地址。
  • 0x0C~0x0F:分區所佔用的扇區數


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章