原文链接:https://blog.csdn.net/hilavergil/article/details/
先看一张硬盘图片(一个盘面):
MBR
主引导记录(MBR,Main Boot Record)是位于磁盘最前边的一段引导(Loader)代码。它负责磁盘操作系统(DOS)对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统(DOS)在对硬盘进行初始化时产生的。 --摘自百度百科
MBR扇区位于物理硬盘的0柱面,0磁头,1扇区,也就是整个硬盘的第一个扇区(偏移量为0),共占512个字节(即一个扇区),每个物理硬盘只有一个MBR扇区。
MBR扇区由三部分构成:第一部分是446字节的引导代码,也就是上面提到的MBR;第二部分是DPT(Disk Partition Table,硬盘分区表),包含4个表项,每个表项16字节,共占用64字节;第三部分是2个字节的结束标志,0x55AA。其结构如下图:

DBR
分区引导扇区也称DBR(DOS BOOT RECORD),是由FORMAT高级格式化命令写到该扇区的内容,DBR是由硬盘的MBR装载的程序段。DBR装入内存后,即开始执行该引导程序段,其主要功能是完成操作系统的自举并将控制权交给操作系统。每个分区都有引导扇区,但只有被设为活动分区才会被MBR装的DBR入内存运行。 --摘自百度百科
在对硬盘分区之后,每一个分区均有一个DBR与之对应。DBR位于每个分区的第一个扇区,大小为512字节。
DBR的结构与分区格式有关,NTFS与FAT32的DBR格式是不同的。
EBR
EBR(Extended Boot Record)是与MBR相对应的一个概念。前边已经讲过,MBR里有一个DPT的区域,它一共是64字节,按每16个字节作为一个分区表项,它最多只能容纳4个分区。能够在MBR的DPT里进行说明的分区称为主分区。如果我们想分区多于4个的时候,MBR的DPT里就会容纳不下来,于是微软就想出了另一个解决方案,在MBR里,只放不多于三个主分区,剩下的分区,则由与MBR结构很相像的另一种分区结构(EBR,也就是扩展分区引导记录)进行说明。一个EBR不够用时,可以增加另一个EBR,如此像一根链条一样地接下去,直到够用为止。 --又摘自百度百科
实际上,EBR中有用的部分仅为其DPT的前两个表项,第一个表项记录了本扩展分区的逻辑偏移地址和扇区个数,第二个表项记录了下一个扩展分区的必要信息,本质上是一个链表的结点。
实例分析
下面给出我的一个Windows7虚拟机的分区结构图(所有的分区文件系统格式均为NTFS):

在Winhex下读取到的硬盘信息如下:


其中MBR、DBR和EBR的位置如下图:

从上图可以看到,整个物理硬盘被分成了6个分区,其中C、E和F是主分区,G、H和I是扩展分区。写代码获得各个分区的信息如下:

MBR扇区数据分析
读取MBR如下(在硬盘偏移量为0处读取512个字节),找到其中64个字节的DPT数据:

提取出来如下:
80 20 21 00 07 FE FF FF 00 08 00 00 00 F0 3F 06
00 FE FF FF 07 FE FF FF 00 F8 3F 06 00 F8 7F 02
00 FE FF FF 07 FE FF FF 00 F0 BF 08 00 00 40 02
00 FE FF FF 0F FE FF FF 00 F0 FF 0A 00 08 40 00
上面四个表项分别指向分区C、E、F和G。
刚刚已经提到,DPT中最多包含4个表项,每个表项16字节,每个表项的结构如下:
[cpp] view plain copy
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/127562.html