



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MBR内幕 个人计算机在系统BIOS中设置了一个访问硬盘的中断接口(INT 13H)。当一个应用程序需要访问硬盘时,它将通过操作系统计算出CHS(即Cylinder柱面、Heads盘面、Sector扇区的组合)地址然后使用这个地址调用INT 13中断的相应功能。BIOS使用这个CHS地址进行硬盘的读写工作。传统BIOS的INT 13有很多缺陷,比如它能访问的最大地址范围是是8GB (102425663)。如今,比较常见的是INT 13将CHS地址转换为LBA逻辑块地址。LBA是非常单纯的一种寻址模式;从0开始编号来定位区块,第一区块LBA=0,第二区块LBA=1,依此类推。LBA使用64位的地址空间表示扇区数目,在每扇区512字节的前提下,它可以寻址的上限是 8,796,093,022,208 GB。传统上操作系统对硬盘的寻址是通过柱(Cylinder)、面(Head)、扇区(Sector)的组合来进行。硬盘的每个盘片称为一个面,每个面对应着一个磁头,所以可以用磁头(head)表示硬盘的盘片,各面磁道(track)号相同的磁道合称为一个柱面(cylinder),每个磁道又分为若干个扇区(sector)。扇区是硬盘读写操作的基本单元,每个扇区一般是512个字节。硬盘上可供用户使用的空间从CHS(0,0,1)开始,此扇区称作“主引导扇区”。主引导扇区上的512字节存储的信息依次是引导代码(偏移量000到1BD 共446个字节),分区表(偏移量1BE到1FD共64字节,每个分区表占16字节),分区有效标志(1fe、1ff, 值是55AA)。在系统启动时,BIOS自检完毕后将控制权交给MBR中的引导代码段,由此段代码加载操作系统完成启动过程。注意:MBR是独立于操作系统的。分区表结构第一分区表1BE1BF1C01C11C21C31C41C5Boot indStart HStart SStart CSys indEnd HEnd SEnd C1C61C71C81C91CA1CB1CC1CDRealsec4Realsec3Realsec2Realsec1#sect4#sect3#sect2#sect1第二分区表1CE1CF1D01D11D21D31D41D5Boot indStart HStart SStart CSys indEnd HEnd SEnd C1D61D71D81D91DA1DB1DC1DDRealsec4Realsec3Realsec2Realsec1#sect4#sect3#sect2#sect1第三分区表1DE1DF1E01E11E21E31E41E5Boot indStart HStart SStart CSys indEnd HEnd SEnd C1E61E71E81E91EA1EB1EC1EDRealsec4Realsec3Realsec2Realsec1#sect4#sect3#sect2#sect1第四分区表1EE1EF1F01F11F21F31F41F5Boot indStart HStart SStart CSys indEnd HEnd SEnd C1F61F71F81F91FA1FB1FC1FDRealsec4Realsec3Realsec2Realsec1#sect4#sect3#sect2#sect1 说明:1、boot ind 活动分区标志,4个分区只能有一个可以设置为活动分区,活动分区标识符是80H,非活动分区是00H。sys ind 分区文件类型。比如0B代表FAT32,扩展分区是052、start H,end H,start S,end S,start C,end C分别表示开始结束的面(H),扇区(S),柱(C)。3、Realsec是DWORD值(字节顺序realsec1,2,3,4),表示当前分区之前的总扇区数。#sect是DWORD值(字节顺序#sect1,2,3,4),表示当前分区占用的扇区数。在主分区表的4个表项的某一项中记录扩展分区信息。要将某个分区置为扩展分区,只要将它的Sys ind字节置为05H即可。扩展分区分区表项记录的是扩展分区的地址信息,此分区表项中的第2、3、4个字节组成的物理地址指向扩展分区的位置。而在扩展分区的第一个扇区中又有一个同主分区表结构相同的分区表,第一表项是硬盘第一个逻辑分区的信息,第二表项则又是一个扩展分区,其中含有第三个逻辑分区的物理地址依此类推,所有的逻辑分区就这样一环一环连接起来构成了链式结构,而一旦扩展分区表项坏掉,相当于这条链子从根上断掉,因此后面的所有逻辑分区将全部消失。偏移1FE处开始的两个字节值为55AAH,这是合法标志。如果没有这个值,操作系统将不会认为这是一个合法的引导扇区。 假如有一个分区起始位置在分区表中表示为(HSC)AAH、BBH、CCH,那么可以直接得Head 值为AAH,扇区的二进制值的前两位移到柱面数的二进制值的前面。例如我们从硬盘分区表中直接读出Sector=BBH=10111011B,Cylinder=CCH=11001100H,那么真实的Sector就应该是111011B=3BH,Cylinder=10001100H=8CH。这么做是为了配合bios和ATA规范才使用这种方式。所以,1024*256*64*512/1024/1024=8192M,即8GB。既然cylinder占10位,那么在分区表中所能表示的最大范围只有1024,那么怎么使用10位记录超过10位的cylinder值呢?在这种情况下,分区起始地址并不起什么作用,而是要靠#sects和Realsec来决定实际的分区地址。 下面是一个硬盘主引导扇区的数据标本:(可以使用hexedit /dev/had获取) 0 1 2 3 4 5 6 7 8 9 A B C D E F0000: eb 48 90 d0 bc 00 7c fb 50 07 50 1f fc be 1b 7c .H.|.P.P.|0020: 38 2c 7c 09 75 15 83 c6 10 e2 f5 cd 18 8b 14 8b 8,|.u.0030: ee 83 c6 10 49 74 16 38 2c 74 f6 be 10 07 03 02 .It.8,t.0040: 80 00 00 80 f7 81 a0 00 00 08 fa ea 50 7c 00 00 .P|.0050: 31 c0 8e d8 8e d0 bc 00 20 fb a0 40 7c 3c ff 74 1. .|u.t7f.0090: 4c 10 be 05 7c c6 44 ff 01 66 8b 1e 44 7c c7 04 L.|.D.f.D|.00a0: 10 00 c7 44 02 01 00 66 89 5c 08 c7 44 06 00 70 .D.f.D.p00b0: 66 31 c0 89 44 04 66 89 44 0c b4 42 cd 13 72 05 f1.D.f.D.B.r.00c0: bb 00 70 eb 7d b4 08 cd 13 73 0a f6 c2 80 0f 84 .p.s.00d0: f1 00 e9 8d 00 be 05 7c c6 44 ff 00 66 31 c0 88 .|.D.f1.00e0: f0 40 66 89 44 04 31 d2 88 ca c1 e2 02 88 e8 88 .f.D.1.00f0: f4 40 89 44 08 31 c0 88 d0 c0 e8 02 66 89 04 66 .D.1.f.f0100: a1 44 7c 66 31 d2 66 f7 34 88 54 0a 66 31 d2 66 .D|f1.f.4.T.f1.f0110: f7 74 04 88 54 0b 89 44 0c 3b 44 08 7d 3c 8a 54 .t.T.D.;D.T0120: 0d c0 e2 06 8a 4c 0a fe c1 08 d1 8a 6c 0c 5a 8a .L.l.Z.0130: 74 0b bb 00 70 8e c3 31 db b8 01 02 cd 13 72 2a t.p.1.r*0140: 8c c3 8e 06 48 7c 60 1e b9 00 01 8e db 31 f6 31 .H|.1.10150: ff fc f3 a5 1f 61 ff 26 42 7c be 7e 7d e8 40 00 .a.&B|.0160: eb 0e be 83 7d e8 38 00 eb 06 be 8d 7d e8 30 00 .8.0.0170: be 92 7d e8 2a 00 eb fe 47 52 55 42 20 00 47 65 .*.GRUB .Ge0180: 6f 6d 00 48 61 72 64 20 44 69 73 6b 00 52 65 61 om.Hard Disk.Rea0190: 64 00 20 45 72 72 6f 72 00 bb 01 00 b4 0e cd 10 d. Error.01a0: ac 3c 00 75 f4 c3 00 00 00 00 00 00 00 00 00 00 .u.01b0: 00 00 00 00 00 00 00 00 60 47 61 47 00 00 00 01 .GaG.01c0: 01 00 0b fe 7f 87 3f 00 00 00 49 17 60 00 80 00 .?.I.01d0: 41 88 0f fe ff ff 88 17 60 00 39 cd f0 08 00 00 A.9.01e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .01f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa .U. 左列是偏移地址,中间是数据区,右列是ASCII文本区。偏移地址1BE至1CD处的十六个字节是第一个分区表项。 第一部分:00 表示此分区为非活动分区。 第二部分:01 01 00 表示此分区开始于1面、1扇区、0道。 第三部分:0b 表示此分区文件系统为Fat32。 第四部分:FE 7F 87 表示此分区结束于254面,63扇区,391道。 至此,我们就可以大致估算出这个分区的容量为: 391*63*254*512/1024/1024=3055M。 第五部分:3F 00 00 00 表示位于此分区之前的扇区数为0000003F=63个扇区 第六部分:49 17 60 00 表示此分区占用的扇区数为00601749H=6297417个扇区=3074M, 与第4部分计算出来的分区容量大致吻合。 这块硬盘在linux下执行fdisk -l /dev/hda 的输出如下:Disk /dev/hda: 80.0 GB, 80026361856 bytes255 heads, 63 sectors/track, 9729 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System/dev/hda1 1 392 3148708+ b Win95 FAT32/dev/hda2 * 393 9729 74999452+ f Win95 Extd (LBA)/dev/hda5 393 1310 7373803+ 83 Linux/dev/hda6 1311 1507 1582371 83 Linux/dev/hda7 1508 3266 14129136 83 Linux/dev/hda8 3267 3332 530113+ 82 Linux swap/dev/hda9 3333 3593 2096451 b Win95 FAT32/dev/hda10 3594 7509 31455238+ b Win95 FAT32/dev/hda11 7510 9729 17832118+ b Win95 FA
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 责任保险试题及答案
- 乐理试题填空题及答案
- 国家税收自考试题及答案
- 考试题及答案黄山
- java左右面试题及答案
- 2024-2025学年广东省佛山市南海区金石实验中学部编版七年级上学期10月月考历史试卷
- 景区宰客面试题及答案
- 2025-2030年中国瓜子项目可行性研究报告
- 2025-2030年中国灶具行业运营格局分析及投资策略研究报告
- 2025-2030年中国滤清器制造行业市场发展调研及投资风险研究报告
- 五下语文第五单元测试卷及答案
- 5.1基因突变和基因重组课件-高一下学期生物人教版必修2
- 2025年计算机Photoshop图像编辑试题及答案
- 2025年教师职业道德与法规考试试题及答案
- DB65∕T 3420-2012 玛纳斯碧玉(标准规范)
- 企业战略规划与盈利模式创新研究
- 浙江省温州市环大罗山联盟2024-2025学年高一下学期期中考试 英语 PDF版含答案
- 北森领导测评试题及答案
- 2025年绵阳富乐中学小升初数学、语文入学考试题
- 知识图谱与大语言模型在教育领域的应用综述
- 考研项目合同协议模板
评论
0/150
提交评论