为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

MBR分区表

2012-03-01 46页 doc 944KB 88阅读

用户头像

is_465331

暂无简介

举报
MBR分区表MBR分区表构成 MBR分区表以80为起始,以55AA为结束,共64个字节,分为4个分区表,一个可启动分区和三个不可启动分区。其结构如下: 分区表一: 第1个字节 80(HEX) *可启动分区 第2~4字节 01/01/00 (HEX)*开始磁头/开始扇区/开始柱面 换算一下,二进制表示就是。 0000 0001/00000001/0000 0000 (BIN)*开始磁头/开始扇区/开始柱面 以下将使用16进制表示,不再换算成二进制! 第五个字节 0C *分区类型FAT32 NTFS为07,可自己变更 第6~8字节 FE/F...
MBR分区表
MBR分区构成 MBR分区表以80为起始,以55AA为结束,共64个字节,分为4个分区表,一个可启动分区和三个不可启动分区。其结构如下: 分区表一: 第1个字节 80(HEX) *可启动分区 第2~4字节 01/01/00 (HEX)*开始磁头/开始扇区/开始柱面 换算一下,二进制表示就是。 0000 0001/00000001/0000 0000 (BIN)*开始磁头/开始扇区/开始柱面 以下将使用16进制表示,不再换算成二进制! 第五个字节 0C *分区类型FAT32 NTFS为07,可自己变更 第6~8字节 FE/FF/FF *结束磁头/结束扇区/结束柱面 第9~12字节 00 00 00 3F *分区前的隐藏扇区 63个隐藏扇区,此设计使0磁道使用0扇区,而1到62扇区不使用,减少读取,以此保护分区表,个人认为是个很不错的设计,不过很少有人知道这个。 第13~16字节 5B 24 40 01 *分区大小 20980827个扇区 当然好要算上分区表的63个扇区 一共20980889个扇区 合10GB 公式为20980889*512/(1024^3)=10GB ------------------------------------------------------我是一条分割线----------------------------------------------- 分区表二: 第17个字节 00:不可启动分区 第18~20字节 开始磁头/开始扇区/开始柱面 第21字节 0F *分区类型为扩展分区 第22~24字节 结束磁头/结束扇区/结束柱面 第25~28字节 分区前的隐藏扇区 第29~32字节 分区大小 分区表三,分区表四,以此类推,不再解释。 至于分区表的修改WinHex(DISKEDIT DOS下)是个不错的软件,了解了这些,就可以自己重建分区表了。 另:MBR是主分区表,误操作使MBR损坏时,DBR或者DBR备份应该没损坏,我们可以通过搜索55AA来获得DBR信息(往前找就行了),来寻找DBR从而了解更多信息(主要是分区大小和开始结束的扇区,磁头,柱头),来帮助我们重建分区表。 此文乃看到一篇关于CIH磁盘修复的文章,后查了些书写出的,不能算原创,因为大部分资料都能查到,只不过很零散罢了,个人只是汇总了一下。在上次写的帖子里提到了这个方法http://bbs.kafan.cn/thread-748156-1-1.html,当时懒得弄,现在有时间了,就写出来了。 MBR(Master Boot Record,另一说法为Main Boot Record),中文意为主引导区记录。 硬盘的0磁道的第一个扇区称为MBR,它的大小是512字节,而这个区域可以分为三个部分。第一部分为pre-boot区(预启动区),占446字节;第二部分是Partition table区(分区表),占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。第三部分是magic number,占2个字节,固定为55AA。 他是不属于任何一个操作系统,也不能用操作系统提供的磁盘操作命令来读取它。但我们可以用ROM-BIOS中提供的INT13H的2号功能来读出该扇区的内容,也可用软件工具Norton8.0中的DISKEDIT.EXE来读取。 用INT13H的读磁盘扇区功能的调用如下: 入口参数:AH=2 (指定功能号) AL=要读取的扇区数 DL=磁盘号(0、1-软盘;80、81-硬盘) DH=磁头号 CL高2位+CH=柱面号 CL低6位=扇区号 CS:BX=存放读取数据的内存缓冲地址 出口参数:CS:BX=读取数据存放地址 错误信息:如果出错CF=1 AH=错误代码 用DEBUG读取位于硬盘0柱面、0磁头、1扇区的操作如下: A>DEBUG -A 100 XXXX:XXXX MOV AX,0201 (用功能号2读1个扇区) XXXX:XXXX MOV BX,1000 (把读出的数据放入缓冲区的地址为CS:1000) XXXX:XXXX MOV CX,0001 (读0柱面,1扇区) XXXX:XXXX MOV DX,0080 (指定第一物理盘的0磁头) XXXX:XXXX INT 13 XXXX:XXXX INT 3 XXXX:XXXX (按回车键) -G=100 (执行以上程序段) -D 1000 11FF (显示512字节的MBR内容) MBR组成 一个扇区的硬盘主引导记录MBR由如图6-15所示的4个部分组成。 ·主引导程序(偏移地址0000H--0088H),它负责从活动分区中装载,并运行系统引导程序。 ·出错信息数据区,偏移地址0089H--00E1H为出错信息,00E2H--01BDH全为0字节。 ·分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH--01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4。 ·结束标志字,偏移地址01FE--01FF的2个字节值为结束标志55AA,如果该标志错误系统就不能启动。 物理第一扇0柱面,0面,1扇区是硬盘主引导记录扇MBR,计算机启动时,首先就 读取该扇,读出硬盘分区表,从中选择三个主分区中唯一一个具有活动标记的分 区,引导该分区上的操作系统。也就是说,无论有几个主分区(≤3),其中必 须有一个分区是活动的。对硬盘进行分区,可以使用任何硬盘分区软件~ 硬盘的前512Byte,MBR是前446byte,447-510是DPT(Disk Partition Table)分区表.最后2位是奇偶校验,校验这个MBR和DPT是否完整.  请大家注意,备份的时候我们还是要备份前面512Byte   MBR:         引导扇区在每个分区里都存在,但是我们常说的*主引导扇区*是硬盘的第一物理扇区。它由两个部分组成:即主引导记录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这类软件可以查杀任意类型的引导型病毒,就是这个原因。 基本磁盘,动态磁盘,GPT磁盘,MBR磁盘介绍 2010-09-03 12:12:01 标签:电脑 IT 磁盘 Windows磁盘管理器中,在磁盘标签处右击鼠标,随磁盘属性的不同会出现“转换到动态磁盘”,“转换到基本磁盘”“转换成GPT磁盘”,“转换成MBR磁盘”等选项。本文就此做简单介绍。部分资料参照网络上的资源。 INCLUDEPICTURE "http://img1.51cto.com/attachment/200907/200907301248905415287.png" \* MERGEFORMATINET 基本磁盘与动态磁盘     磁盘的使用方式可以分为两类:一类是“基本磁盘”。基本磁盘非常常见,我们平时使用的磁盘类型基本上都是“基本磁盘”。“基本磁盘”受26个英文字母的限制,也就是说磁盘的盘符只能是26个英文字母中的一个。因为A、B已经被软驱占用,实际上磁盘可用的盘符只有C~Z 24个。另外,在“基本磁盘”上只能建立四个主分区(注意是主分区,而不是扩展分区);另一种磁盘类型是“动态磁盘”。“动态磁盘”不受26个英文字母的限制,它是用“卷”来命名的。“动态磁盘”的最大优点是可以将磁盘容量扩展到非邻近的磁盘空间。     动态硬盘,是指在磁盘管理器中将本地硬盘升级得来的。动态磁盘与基本磁盘相比,最大的不同就是不再采用以前的分区方式,而是叫做卷集(Volume),卷集分为简单卷、跨区卷、带区卷、镜像卷、RAID-5 卷。基本磁盘和动态磁盘相比,有以下区别: 1、卷集或分区数量。动态磁盘在一个硬盘上可创建的卷集个数没有限制。而基本磁盘在一个硬盘上只能分最多四个主分区。 2、磁盘空间管理。动态磁盘可以把不同磁盘的分区创建成一个卷集,并且这些分区可以是非邻接的,这样的大小就是几个磁盘分区的总大小。基本磁盘则不能跨硬盘分区并且要求分区必须是连续的空间,每个分区的容量最大只能是单个硬盘的最大容量,存取速度和单个硬盘相比也没有提升。 3、磁盘容量大小管理。动态磁盘允许我们在不重新启动机器的情况下调整动态磁盘大小,而且不会丢失和损坏已有的数据。而基本磁盘的分区一旦创建,就无法更改容量大小,除非借助于第三方磁盘工具软件,比如PQ Magic。 4、磁盘配置信息管理和容错。动态磁盘将磁盘配置信息放在磁盘中,如果是RAID容错系统会被复制到 其他动态磁盘上,这样可以利用RAID-1的容错功能,如果某个硬盘损坏,系统将自动调用另一个硬盘的数据,保持数据的完整性。而基本磁盘将配置信息存放在引导区,没有容错功能。     基本磁盘转换为动态磁盘可以直接进行,但是该过程是不可逆的。要想转回基本磁盘,只有把所有数据全部拷出,然后删除硬盘所有分区后才能转回去。 GPT磁盘与MBR磁盘     GPT(Globally Unique Identifier Partition Table Format)一种由基于 Itanium 计算机中的可扩展固件接口 (EFI) 使用的磁盘分区架构。与主启动记录 (MBR) 分区方法相比,GPT 具有更多的优点,因为它允许每个磁盘有多达 128 个分区,支持高达 18 千兆兆字节的卷大小,允许将主磁盘分区表和备份磁盘分区表用于冗余,还支持唯一的磁盘和分区 ID (GUID)。   与支持最大卷为 2 TB (terabytes) 并且每个磁盘最多有 4 个主分区(或 3 个主分区,1 个扩展分区和无限制的逻辑驱动器)的主启动记录 (MBR) 磁盘分区的样式相比,GUID 分区表 (GPT) 磁盘分区样式支持最大卷为 18 EB (exabytes) 并且每磁盘最多有 128 个分区。与 MBR 分区的磁盘不同,至关重要的平台操作数据位于分区,而不是位于非分区或隐藏扇区。另外,GPT 分区磁盘有多余的主要及备份分区表来提高分区数据结构的完整性。     在运行带有 Service Pack 1 (SP1) 的 Windows Server 2003 的基于 x86 的计算机和基于 x64 的计算机上,操作系统必须驻留在 MBR 磁盘上。其他的硬盘可以是 MBR 或 GPT。     在基于 Itanium 的计算机上,操作系统加载程序和启动分区必须驻留在 GPT 磁盘上。其他的硬盘可以是 MBR 或 GPT。 在单个动态磁盘组中既可以有 MBR,也可以有 GPT 磁盘。也使用将基本 GPT 和 MBR 磁盘的混合,但它们不是磁盘组的一部分。可以同时使用 MBR 和 GPT 磁盘来创建镜像卷、带区卷、跨区卷和 RAID-5 卷,但是 MBR 的柱面对齐的限制可能会使得创建镜像卷有困难。通常可以将 MBR 的磁盘镜像到 GPT 磁盘上,从而避免柱面对齐的问。可以将 MBR 磁盘转换为 GPT 磁盘,并且只有在磁盘为空的情况下,才可以将 GPT 磁盘转换为 MBR 磁盘。否则数据将发生丢失!!! 不能在可移动媒体,或者在与群集服务使用的共享 SCSI 或 Fibre Channel 总线连接的群集磁盘上使用 GPT 分区样式。 深度探讨MBR引导 2010-07-06 11:22:37 标签:探讨 深度 引导 MBR 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://popeyeywy.blog.51cto.com/745223/344738 在本文开始,笔者提出了4个疑问,这些问题将帮助我们更好的理解计算机启动引导的整个过程,让我们的思路更加清晰   1、全新硬盘GHOST克隆恢复,系统可以启动吗? 2、预装XP的操作系统的电脑,GHOST克隆恢复系统可以启动吗? 3、预装Vista及以上级别的操作系统,GHOST克隆恢复系统可以启动吗? 4、预装Linux操作系统的电脑,GHOST克隆恢复可以启动吗?   这些问题其实都是关于GHOST的,大家都知道GHOST可以备份我们整个电脑的分区,甚至是整个硬盘,有些时候我们GHOST恢复过的计算机会发生不能启动的问题,为什么呢?这就是本文想和大家一起来探讨的重点   图:GHOST 11.5.1 这就是我们熟知的GHOST界面,在GHOST中常用的几个选项是   Partition to Image(将分区备份为GHO后缀的磁盘镜像) Disk to Image(将磁盘备份为GHO后缀的磁盘镜像) Partition from Image(将一个镜像恢复到一个分区) Disk From Image(将一个镜像恢复到整个磁盘)   这些参数在平时可能我们用的比较多,特别是使用一些快速安装光盘的时候,例如深度技术快速安装,以及萝卜快速安装,之所以安装系统比较块是因为,制作这类系统盘的技术爱好者,已经将整个XP封装成了一个GHO文件,我们所需要做的就是插入光盘,选择一键安装即可   但是就像我们上方提出的问题一样,有些时候我们安装玩GHOST系统盘后发现操作系统启动不起来了?这是为什么呢?这里我们就要说说MBR了 Mbr(Mast Boot Record)主引导记录,这个主引导记录是存放在硬盘的0磁道中的,也就是硬盘的起始位置,MBR的逻辑结构见下图     MBR分为三部分 PART1、启动代码:也可以说是引导代码,这里面包含了各操作系统的引导信息,注意这里不存放引导文件,只存放引导代码,引导代码更具其特征来判断磁盘上存放的是什么操作系统,并且在分区表内找到激活的分区,来读取磁盘上的引导程序 我们知道已Windows XP为例,Windows XP的引导程序主要有这三部分组成 NTLDR.EXE、BOOT.INI、NTDECT 引导代码的任务就是寻找到这些引导程序把控制权交给引导程序,引导程序来启动系统的内核,从来又内核来启动操作系统,在这里就不赘述了 PART2、分区表:分区表记录着我们磁盘的分区状况,一块磁盘只能有4个主分区,和我们在XP里看到的C盘、D盘、E盘、F盘、G盘不同的是,在一个物理磁盘上只能分4个主分区,在XP下我们看到的只能说是一个主分区或者说是几个逻辑驱动器,一般的习惯,我们会把C划分成主分区,其余的空间划分成扩展空间,在扩展空间中就可以创建D\E\F\G\H\I等等等等的逻辑驱动器 PART3、结束位     说了那么多关于MBR的,归根到底我们系统是否能正常启动取决于三个方面   第一、MBR中的引导代码正确 第二、主分区被设置为活动 第三、引导程序正确   现在我们就回到上面的问题,先看看上述问题的实验结果   1、全新硬盘GHOST克隆恢复,系统可以启动吗? 笔者手头准备了一张深度技术V9.0的安装光盘,以光盘方式启动进入GHOST界面,笔者发现GHOST是不能够对分区进行还原的,因为全新硬盘并没有分区,所以全新硬盘只能使用Disk From Image(从一个镜像恢复到整个硬盘) 恢复完毕后发现这个系统是可以正常启动的,笔者就疑惑了,难道GHOST可以写MBR信息吗?或者说深度技术的安装光盘是带有MBR信息的? 带着这个疑问笔者查看了GHOST的参数,发现GHOST其中的一个参数为-BI这个参数是可以备份引导信息的,当然这一切只是推测,在后面的试验中笔者将更进一步的来描述MBR中的奥秘。   2、预装XP的操作系统的电脑,GHOST克隆恢复系统可以启动吗? 预装XP的操作系统,在还原了深度GHOST盘后,能够正常启动,其实这也是在笔者的预料之中,因为XP的引导信息一样,GHOST默认是不会去写MBR中的信息,因为GHOST只是针对盘符中的数据来进行操作的,能够顺利还原   3、预装Vista及以上级别的操作系统,GHOST克隆恢复系统可以启动吗? 预装Vista操作系统,可以顺利还原XP镜像,但是在启动时会蓝屏?同样是微软的引导代码为什么会蓝屏?笔者的疑惑开始不断增多?这是为什么?   4、预装Linux操作系统的电脑,GHOST克隆恢复可以启动吗? 预装Linux操作系统,当还原XP镜像后,系统停留在GRUB界面,这个结果明显和1问题冲突,如果深度镜像写入了MBR,那么系统应该是可以启动的   于是笔者4个实验做完还是一头雾水,MBR中到底存放有哪些东西?如何查看MBR中的信息?对比MBR信息是否能找出其中的玄机呢?   DOS分区体系的主引导记录扇区-MBR 2010-12-05 22:31:25 标签:MBR 使用DOS分区体系时,磁盘的第一个扇区――也就是0号扇区被称为主引导记录扇区,也称为MBR(主引导记录,Master Boot Recorder--MBR)。当计算机启动并完成自检后,首先会寻找磁盘的MBR扇区并读取其中的引导记录,然后将系统控制权交给它。由此可见,如果MBR损坏,则后续的所有工作都无法继续进行。 1. MBR数据结构 MBR由446个字节的引导代码、64个字节的主分区表及2个字节的签名值“55AA”组成。我们首先使用Winhex来看一下MBR扇区的内容,如图2.11所示(因为该磁盘尚未进行分区操作,所以分区表全部为空)。 图2.11 主引导记录扇区   可以看到,MBR扇区由三大部分组成: (1)引导代码。MBR接管系统的控制权后,引导代码负责对其他代码信息进行检查(比如查看是否有“55AA”有效标记)并进一步引导系统。 (2)分区表。分区表负责描述磁盘内的分区情况。 (3)“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描述了一个被划分成三个主分区的磁盘,前三个分区表项分别用来描述一个分区,最后一个分区表项未被使用。     图2.12 划分为三个主分区的磁盘   3)    0x1FE~0x1FF:2个字节,有效结束标志“55AA”。如果没有这个签名值,操作系统会认为该磁盘没有被初始化,也就无法正常加载磁盘上的分区和解释数据。不过,只要分区和文件系统正常,某些数据恢复软件在没有这个签名值的情况下也可以正确的到分区表并正确地解释出所有正常的数据。   这是一张MBR表格,下面这些参数至关重要 在LInux环境下,备份MBR是一件相当简单的事情,只需要一条指令就搞定了。   dd if=/dev/sda of=~/MBR_`date +%F` bs=512 count=1 #需要root权限   这样,sda的MBR就被写入用户目录下MBR_2010-03-17这样的文件中,执行ls -l可以看到,该文件大小为512B。   MBR损坏时,恢复也同样简单: 在linux sruce 模式下  dd if=~/MBR_* of=/dev/sda bs=512 count=1 #同样需要root权限 签:数据恢复 硬盘数据恢复 存储安全 说明:硬盘主引导记录独立于操作系统,但又和操作系统息息相关——很多时候它又是由 ; 操作系统所提供的工具所生成(例外的情况是您使用了其他的分区工具,不过它又运行在 ; 什么操作系统中呢?;()。 ; ; 如果您安装了Windows 98(我现在暂时不能接触95下的主引导记录,总不能用95重装我的 ; 系统吧?)操作系统,那您机器上的主引导记录已经与以前的大有不同了,通过下面的分析 ; 您一定能对Windows 98为什么要更改主引导记录有所了解——它已经开始支持扩展Int13h ; 了!并且这个主引导记录的编程技巧更是我们应该学习的。 ; ; 主引导记录包括代码、数据两部分。它在被BIOS中断Int19h装入内存后获得控制权。数据 ; 部分最重要的当然是分区表了!彻底熟悉主引导记录,可以帮助我们了解系统的引导过程, ; 处理因主引导记录损坏所造成的无法引导故障,消除引导型计算机病毒,更使我们能通过 ; 修改主引导记录完成我们希望的工作:如多重引导,系统加软锁等... ; ; BIOS中断总是把主引导记录所在扇区(硬盘的0头0道1扇区)的内容(包括代码和数据) ; 装入内存0000:7C00起始的区域,然后检验该扇区内容的最后两个字节是不是“AA55”, ; 如果不是,那么对不起,Int19h将不把控制权交给主引导记录;若是,则下面的主引导记录 ; 才能获得了控制权了(Int19通过跳转指令交转控制权): ; ; 二进制形式的主引导记录: 0000:0600 33 C0 8E D0 BC 00 7C FB-50 07 50 1F FC BE 1B 7C 3.....|.P.P....| 0000:0610 BF 1B 06 50 57 B9 E5 01-F3 A4 CB BE BE 07 B1 04 ...PW........... 0000:0620 38 2C 7C 09 75 15 83 C6-10 E2 F5 CD 18 8B 14 8B 8,|.u........... 0000:0630 EE 83 C6 10 49 74 16 38-2C 74 F6 BE 10 07 4E AC ....It.8,t....N. 0000:0640 3C 00 74 FA BB 07 00 B4-0E CD 10 EB F2 89 46 25 <.t...........F% 0000:0650 96 8A 46 04 B4 06 3C 0E-74 11 B4 0B 3C 0C 74 05 ..F...<.t...<.t. 0000:0660 3A C4 75 2B 40 C6 46 25-06 75 24 BB AA 55 50 B4 :.u+@.F%.u$..UP. 0000:0670 41 CD 13 58 72 16 81 FB-55 AA 75 10 F6 C1 01 74 A..Xr...U.u....t 0000:0680 0B 8A E0 88 56 24 C7 06-A1 06 EB 1E 88 66 04 BF ....V$.......f.. 0000:0690 0A 00 B8 01 02 8B DC 33-C9 83 FF 05 7F 03 8B 4E .......3.......N 0000:06A0 25 03 4E 02 CD 13 72 29-BE 2D 07 81 3E FE 7D 55 %.N...r).-..>.}U 0000:06B0 AA 74 5A 83 EF 05 7F DA-85 F6 75 83 BE 1A 07 EB .tZ.......u..... 0000:06C0 8A 98 91 52 99 03 46 08-13 56 0A E8 12 00 5A EB ...R..F..V....Z. 0000:06D0 D5 4F 74 E4 33 C0 CD 13-EB B8 00 00 80 49 12 00 .Ot.3........I.. 0000:06E0 56 33 F6 56 56 52 50 06-53 51 BE 10 00 56 8B F4 V3.VVRP.SQ...V.. 0000:06F0 50 52 B8 00 42 8A 56 24-CD 13 5A 58 64 10 72 PR..B.V$..ZX.d.r 0000:0700 0A 40 75 01 42 80 C7 02-E2 F7 F8 5E C3 EB 74 B7 .@u.B......^..t. 0000:0710 D6 C7 F8 B1 ED CE DE D0-A7 00 BC D3 D4 D8 B2 D9 ................ 0000:0720 D7 F7 CF B5 CD B3 CA B1-B3 F6 B4 ED 00 4D 69 73 .............Mis 0000:0730 73 69 6E 67 20 6F 70 65-72 61 74 69 6E 67 20 73 sing operating s 0000:0740 79 73 74 65 6D 00 00 00-00 00 00 00 00 00 00 00 ystem........... 0000:0750 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0000:0760 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0000:0770 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0000:0780 00 00 00 8B FC 1E 57 8B-F5 CB 00 00 00 00 00 00 ......W......... 0000:0790 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0000:07A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0000:07B0 00 00 00 00 00 00 00 00-86 D8 00 00 00 00 80 01 ................ 0000:07C0 01 00 06 3F 3F FD 3F 00-00 00 41 A0 0F 00 00 00 ...??.?...A..... 0000:07D0 01 FE 05 3F FF FE 80 A0-0F 00 C0 4F 2F 00 00 00 ...?.......O/... 0000:07E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0000:07F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA ..............U. ; ; 反汇编结果 ; ; 0000:7C00~0000:7C1A:初始化各个段寄存器、堆栈指针,最后将主引导记录在内存中搬家,腾出其所占内 ; 存空间以供装入分区引导记录。 0000:7C00 33C0       XOR    AX,AX         ;AX寄存器清0 0000:7C02 8ED0       MOV    SS,AX         ;SS=0 0000:7C04 BC007C     MOV    SP,7C00       ;装填栈指针——SS:SP=0000:7C00 0000:7C07 FB         STI                  ;开中断(装填栈指针时为避免硬件中断引起栈混乱应关中断) 0000:7C08 50         PUSH   AX            ; 0000:7C09 07         POP    ES            ;装填附加数据段寄存器ES=0 0000:7C0A 50         PUSH   AX            ; 0000:7C0B 1F         POP    DS            ;装填数据段寄存器DS=0 0000:7C0C FC         CLD                  ;规定其后的串操作为正向串操作 0000:7C0D BE1B7C     MOV    SI,7C1B       ;源指针 0000:7C10 BF1B06     MOV    DI,061B       ;目的指针 0000:7C13 50         PUSH   AX            ; 0000:7C14 57         PUSH   DI            ;看看0000:7C1A——构造一个跳转 0000:7C15 B9E501     MOV    CX,01E5       ; 0000:7C18 F3         REPZ                 ; 0000:7C19 A4         MOVSB                ;0000:7C1B起始的CX字节传送至0000:061B起始的区域 0000:7C1A CB         RETF                 ;跳转到0000:061B(这是一种技巧跳转) ;  ; 为直观起见,下面的地址按实际运行时的地址给出。 ; 0000:061B~0000:062B:对分区表进行初步检验,一旦检测到某分区表项状态字节大于等于80h,就通过(当 ; 然,在此之前如果检测到某项分区表的状态字节小于80h,就转错误处理。当然,如果四个分区项的状态字节 ; 都为零,主引导记录就会调用BIOS-ROM的INT 18h,显示"PRESS A KEY TO REBOOT"信息等待你的操作。 0000:061B BEBE07     MOV    SI,07BE       ;SI指向第一个分区表项,这时CX=0 0000:061E B104       MOV    CL,04         ;分区表共四个表项 0000:0620 382C       CMP    [SI],CH       ; 0000:0622 7C09       JL     062D          ;大于等于80h转[注意JL指令:(SF xor OF)=1则转] 0000:0624 7515       JNZ    063B          ;不为0则[SI]一定小于80h,只能转错误处理了! 0000:0626 83C610     ADD    SI,+10        ;为零则检查下一表项 0000:0629 E2F5       LOOP   0620          ;检查下一表项 0000:062B CD18       INT    18            ;四表项的状态字节都为0,则系统只好调用INT 18h了! ;  ; 0000:062D~0000:0639:检查剩余的分区表项——状态字节必须为零,否则显示错误信息“分区表无效”然 ; 后当机!拜托,微软搞错没有,怎么用中文提示信息?真TM傻得可爱! ; 这里还有个小BUG,前面放行原则是只要状态字节大于等于80h,那么如果这个字节是诸如A0h、E5h之类数值 ; 呢?嘿嘿,这个引导记录统统认为是有效的可引导分区了! 0000:062D 8B14       MOV    DX,[SI]       ;为读分区引导记录做准备:磁头号→DH,驱动器号→DL 0000:062F 8BEE       MOV    BP,SI         ;SI→BP,保存可引导分区表项的指针 ;  0000:0631 83C610     ADD    SI,+10        ;其余的分区表项还要检查检查的 0000:0634 49         DEC    CX            ; 0000:0635 7416       JZ     064D          ;CX=0则检查顺利通过,转继续 0000:0637 382C       CMP    [SI],CH       ; 0000:0639 74F6       JZ     0631          ;为零,是合法表项,再查下一表项 ;  ; 0000:063B~0000:064B:执行错误处理——报告错误信息后当机 0000:063B BE1007     MOV    SI,0710       ;错误信息字符串偏移+1→SI 0000:063E 4E         DEC    SI            ;SI-1→SI 0000:063F AC         LODSB                ;SI+1→SI 0000:0640 3C00       CMP    AL,00         ; 0000:0642 74FA       JZ     063E          ;AL=0则表明一条错误信息显示完毕,系统陷入一个死循环 0000:0644 BB0700     MOV    BX,0007       ;字符方式显示 0000:0647 B40E       MOV    AH,0E         ; 0000:0649 CD10       INT    10            ;以写电传方式显示信息(只显示一个字符) 0000:064B EBF2       JMP    063F          ;显示下一个字符,直到遇到提示信息结束为止 ;  ; 0000:064D~0000:0662:判断可引导分区的分区类型,然后转相应处理程序。 0000:064D 894625     MOV    [BP+25],AX    ;BP=指向第一个可引导分区表项的指针,这时AX=0000h                                          ;使用长度最短的指令将[BP+25]起始的两个单元清零                                          ;这两个单元将被用来存放中间变量 0000:0650 96         XCHG   SI,AX         ;此时SI清零的最佳指令选择(仅1字节),将服务于0000:06B8 0000:0651 8A4604     MOV    AL,[BP+04]    ;取分区类型(本例是“06”喽——FAT16主DOS分区) 0000:0654 B406       MOV    AH,06         ;为扩展INT 13h无法使用做好更改分区类型的准备 0000:0656 3C0E       CMP    AL,0E         ;0Eh:需要用扩展INT 13h访问的FAT16主DOS分区 0000:0658 7411       JZ     066B          ;0Eh类型的分区转066Bh 0000:065A B40B       MOV    AH,0B         ; 0000:065C 3C0C       CMP    AL,0C         ;0Ch:需要用扩展INT 13h访问的FAT32分区 0000:065E 7405       JZ     0665          ;0Ch类型的分区转0665h先行预处理 0000:0660 3AC4       CMP    AL,AH         ;0Bh:用传统INT 13h就可以访问的FAT32分区 0000:0662 752B       JNZ    068F          ;其他类型的分区转068Fh ;  ; 0000:0664~0000:06A1:根据分区类型和分区表表项内容进行读取分区引导记录前的处理工作 0000:0664 40         INC    AX            ;★★★0Bh类型的分区由此开始处理,此条指令用意是清ZF位 0000:0665 C6462506   MOV    BYTE PTR [BP+25],06 ;★★★0Ch类型的分区由此开始处理                                          ;为什么取值06,一时没有自圆我说的解释,请耐心几天吧。 0000:0669 7524       JNZ    068F          ;请注意上面指令对ZF位的影响:0Bh类型分区转,0Ch则不转 ; 0000:066B~0000:068C这段代码仅当分区类型是0Ch、0Eh才有获得执行的机会 0000:066B BBAA55     MOV    BX,55AA       ;★★★0Eh类型的分区由此开始处理 0000:066E 50         PUSH   AX            ; 0000:066F B441       MOV    AH,41         ;扩展INT 13h功能,检测BIOS是否已经支持扩展INT13h 0000:0671 CD13       INT    13            ;入口参数:BX=55AAh,DL=驱动器号,AH=41h 0000:0673 58         POP    AX            ;执行完恢复AX为060Eh 0000:0674 7216       JB     068C          ;不支持则转 0000:0676 81FB55AA   CMP    BX,AA55       ; 0000:067A 7510       JNZ    068C          ;扩展INT13h不可用也转 0000:067C F6C101     TEST   CL,01         ;测试扩展盘访问是否被支持 0000:067F 740B       JZ     068C          ;不支持还转 ; 因为扩展INT13h方式读盘与标准INT13h方式读盘有很大差别,所以0000:0686处指令修改其后的代码以保证按 ; 照扩展读方式读分区引导扇区时能正确跳转到相应的处理程序中。 0000:0681 8AE0       MOV    AH,AL         ;分区类型→AH 0000:0683 885624     MOV    [BP+24],DL    ;保存驱动器号→[BP+24] 0000:0686 C706A106EB1E MOV    WORD PTR [06A1],1EEB ;修改0000:06A1处代码为"JMP 06C1" 0000:068C 886604     MOV    [BP+04],AH    ;注意:如果扩展INT13h不能使用则A改分区类型为06,但如果                                          ;扩展INT13h能使用,则仍保持原分区类型不变 0000:068F BF0A00     MOV    DI,000A       ;★★★其它类型分区由此开始处理。此条指令初始化计数器 0000:0692 B80102     MOV    AX,0201       ;AH:读操作,AL:读取1个扇区的内容 0000:0695 8BDC       MOV    BX,SP         ;SP=7C00→BX,指定分区引导记录装入内存的位置偏移 0000:0697 33C9       XOR    CX,CX         ;CX清零 0000:0699 83FF05     CMP    DI,+05        ;注意5  0000:069C 7F03       JG     06A1          ;大于则转去读由分区表指定的分区引导扇区 0000:069E 8B4E25     MOV    CX,[BP+25]    ;小于则证明所读分区表指定的引导扇区无合法的引导记录,                                          ;改按???再读,毕竟多一种选择多一次机会嘛!;) ; 以下标有①②者请注意它们的地址都是一样的,就是说实际运行中只可能是二者之一,但为了分析之方便,我 ; 把两者都列了出来以供对比,阅读时千万别看成是两条指令了啊! ①0000:06A1 034E02     ADD    CX,[BP+02]    ;获取分区引导扇区所在的柱面号和物理扇区号 ②0000:06A1 EB1E       JMP    06C1          ;如果分区类型是0Ch、0Eh而且扩展读能使用则执行该指令 ;  ; 0000:06A4:将可引导分区的分区引导记录装入内存指定区域 ; 入口参数:AH=功能号,02为读盘操作;AL=一次读取的扇区数 ;          ES:BX=读入内存的起始地址 ;          CH=10位柱面号的低8位;CL:高两位是10位柱面号的高两位,低6位是物理扇区号 ;          DH=磁头号;DL=驱动器号,最高位(即位7)为0是软盘,为1是硬盘 0000:06A4 CD13       INT    13            ;读分区引导记录到0000:7C00起始的区域 ;  ;  0000:06A6 7229       JB     06D1          ;不成功转 0000:06A8 BE2D07     MOV    SI,072D       ;错误信息字符串偏移→SI 0000:06AB 813EFE7D55AA CMP    WORD PTR [7DFE],AA55 ;分区引导记录合法吗? 0000:06B1 745A       JZ     070D          ;合法则转(这是主引导记录唯一的正常出口)  0000:06B3 83EF05     SUB    DI,+05        ;不合法则为换读其他扇区做准备 0000:06B6 7FDA       JG     0692          ;只有一次换读扇区的机会! ;  ; 0000:06B8~0000:06BF:错误预处理 0000:06B8 85F6       TEST   SI,SI         ;测试SI值是否为0,其意义在于确定该显示哪条信息 0000:06BA 7583       JNZ    063F          ;不为0则转错误处理,显示“Missing operating system” 0000:06BC BE1A07     MOV    SI,071A       ;错误信息字符串偏移→SI 0000:06BF EB8A       JMP    064B          ;转错误处理,显示“加载操作系统时出错” ;  ; 0000:06C1~0000
/
本文档为【MBR分区表】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索