2.2.2 主引导记录扇区MBR(1)
使用DOS分区体系时,磁盘的第一个扇区–也就是0号扇区被称为主引导记录扇区,也称为主引导记录MBR(Master Boot Recorder,MBR)。当计算机启动并完成自检后,首先会寻找磁盘的MBR扇区并读取其中的引导记录,然后将系统控制权交给它。由此可见,如果MBR损坏,则后续的所有工作都无法继续进行。
1.MBR数据结构
MBR由446个字节的引导代码、64个字节的主分区表及2个字节的签名值"55AA"组成。我们首先使用Winhex来看一下MBR扇区的内容,如图2.11所示(因为该磁盘尚未进行分区操作,所以分区表全部为空)。
可以看到,MBR扇区由如下三大部分组成。
引导代码:MBR接管系统的控制权后,引导代码负责对其他代码信息进行检查(例如查看是否有"55AA"有效标记)并进一步引导系统。
分区表:分区表负责描述磁盘内的分区情况。
"55AA"有效标志:"55AA"标志作为有效标志以通知系统该MBR扇区是否有效,如果该标志丢失或损坏,磁盘将会显示为"未初始化"。
MBR扇区的数据结构如表2.1所示。
表2.1 MBR扇区的数据结构
字节偏移(十六进制) |
字 节 数 |
描 述 |
00~1BD |
446 |
引导代码 |
1BE~1CD |
16 |
分区表项1 |
1CE~1DD |
16 |
分区表项2 |
1DE~1ED |
16 |
分区表项3 |
1EE~1FD |
16 |
分区表项4 |
1FE~1FF |
2 |
签名值(55AA) |
具体含义解释如下。
(1) 0x00~0x1BD:446个字节,引导代码区域,包含一段指令,用以通知计算机如何访问分区表并定位操作系统的位置。
主引导代码是一段非常重要的代码,因为它是磁盘上最先装入内存并执行的代码。也正因为如此,很多引导型病毒把自己嵌入到主引导代码中,从而实现首先运行的目的。标准的Microsoft引导代码会在计算机启动完成自检并将控制权交给它后,读取分区表并根据分区表项的可引导标志判定哪个主分区是引导分区,找到这个分区后就查看并读取位于该分区第一个扇区的引导代码并进而启动操作系统,这部分代码会因操作系统的不同而不同。
利用引导代码可以实现多系统引导。很多用户需要在同一台计算机上安装超过一个的操作系统,这就需要使用多系统引导,以便能够在计算机启动时选择要进入的操作系统。多系统引导可以由两种方法实现。
一种方法是,大多数用户会将Windows操作系统作为要安装的系统之一,Windows可以在引导分区中设置一段代码,以允许用户选择要进入的操作系统。也就是说,MBR中的主引导程序先加载Windows引导代码,然后由Windows引导代码再呈现给用户一个操作系统选择界面。
另一种方法是改变MBR中的引导代码,修改后的引导代码会直接呈现给用户一个选项列表,由用户选择从哪个分区进行引导。这种方法一般会占用位于第一个分区之前的一部分未使用扇区存放程序代码。
(2) 0x1BE~0x1FD:64个字节,4个分区表项,每个表项占用16个字节。每个表项描述一个DOS分区,最多可以描述4个主分区。
分区表项并没有顺序要求,也就是说,并不严格要求第一个分区表项对应物理位置的第一个分区,第二个表项对应第二个分区。
分区表也并不要求必须先使用第一个分区表项,然后依次使用后面的表项。操作系统在检索主分区表时,会完整地对四个分区表项进行完全检索,然后根据每个分区表项描述的物理位置定位分区,而不会以分区表项的先后顺序定位分区所处的先后位置关系。
图2.12描述了一个被划分成三个主分区的磁盘,前三个分区表项分别用来描述一个分区,最后一个分区表项未被使用。
(3) 0x1FE~0x1FF:2个字节,有效结束标志"55AA"。如果没有这个签名值,操作系统会认为该磁盘没有被初始化,也就无法正常加载磁盘上的分区和解释数据。不过,只要分区和文件系统正常,某些数据恢复软件在没有这个签名值的情况下也可以正确地检测到分区表并正确地解释出所有正常的数据。