精华内容
下载资源
问答
  • 主引导记录

    2019-02-28 20:21:55
    磁盘分区:MBR, GPT MBR: 0 sector Master boot record 主引导记录 分为三部分: 共512字节 ...

    磁盘分区:MBR, GPT

            MBR: 0 sector
    
                        Master boot record 
                            主引导记录
    
                                        分为三部分: 共512字节
    
                                                        446bytes:bootloader(引导加载程序),引导启动操作系统的程序;
                                                        64bytes:分区表,每16bytes标识一个分区,一共只能有4个分区;
                                                                            4主分区  
                                                                            3主1扩展:
                                                                                            n个逻辑分区
                                                        2bytes:MBR区域的有效性标识:55AA为有效;
    
                            主分区和扩展分区的标识:1-4
                            逻辑分区: 5 +
    
        GPT : 

    转载于:https://blog.51cto.com/itxuezhe/2356409

    展开全文
  • BOOTICE主引导记录

    2012-06-16 19:53:37
    BOOTICE主引导记录
  • WINHEX修复主引导记录教程
  • 主引导记录MBR

    2019-09-25 06:44:42
    作者:马 岩(Furzoom) (http://www.cnblogs.com/furzoom/)版权声明:本文的...主引导记录(Master Boot Record,缩写:MBR),又叫做主引导扇区,是计算机开机后访问硬盘时所必须要读取的首个扇区,它在硬盘上...

    作者:马 岩Furzoom) (http://www.cnblogs.com/furzoom/
    版权声明:本文的版权归作者与博客园共同所有。转载时请在明显地方注明本文的详细链接,未经作者同意请不要删除此段声明,感谢您为保护知识产权做出的贡献。

    主引导记录Master Boot Record,缩写:MBR),又叫做主引导扇区,是计算机开机后访问硬盘时所必须要读取的首个扇区,它在硬盘上的三维地址为(柱面,磁头,扇区)=(0,0,1)。在深入讨论主引导扇区内部结构的时候,有时也将其开头的446字节内容特指为“主引导记录”(MBR),其后是4个16字节的“磁盘分区表”(DPT),以及2字节的结束标志(55AA)。因此,在使用“主引导记录”(MBR)这个术语的时候,需要根据具体情况判断其到底是指整个主引导扇区,还是主引导扇区的前446字节。

    标准 MBR 结构
    地址描述长度
    (字节)
    HexOctDec
    0000 0000 0 代码区 440
    (最大 446)
    01B8 0670 440 选用磁盘标志 4
    01BC 0674 444 一般为空值; 0x0000 2
    01BE 0676 446 标准 MBR 分区表规划
    (四个16 byte的主分区表入口)
    64
    01FE 0776 510 55h MBR 有效标志:
    0x55AA
    2
    01FF 0777 511 AAh
    MBR, 总大小: 446 + 64 + 2 =512

    主引导扇区记录着硬盘本身的相关信息以及硬盘各个分区的大小及位置信息,是数据信息的重要入口。如果它受到破坏,硬盘上的基本数据结构信息将会丢失,需要用繁琐的方式试探性的重建数据结构信息后才可能重新访问原先的数据。主引导扇区内的信息可以通过任何一种基于某种操作系统的分区工具软件写入,但和某种操作系统没有特定的关系,即只要创建了有效的主引导记录就可以引导任意一种操作系统(操作系统是创建在高级格式化的硬盘分区之上,是和一定的文件系统相联系的)。

    对于硬盘而言,一个扇区可能的字节数为128×2n (n=0,1,2,3)。大多情况下,取n=2,即一个扇区(sector)的大小为512字节。

     

    主引导记录的组成

    启动代码

    主引导记录最开头是第一阶段引导代码。其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后将控制权交给硬盘上的引导程序(如GNU GRUB)。 它不依赖任何操作系统,而且启动代码也是可以改变的,从而能够实现多系统引导。

    硬盘分区表

    硬盘分区结构信息
    偏移长度(字节)意义
    00H 1 分区状态:00-->非活动分区;80--> 活动分区;
    其它数值没有意义
    01H 1 分区起始磁头号(HEAD),用到全部8位
    02H 2 分区起始扇区号(SECTOR),占据02H的位0-5;
    该分区的起始磁柱号(CYLINDER),占据
    02H的位6-7和03H的全部8位
    04H 1 文件系统标志位
    05H 1 分区结束磁头号(HEAD),用到全部8位
    06H 2 分区结束扇区号(SECTOR),占据06H的位0-5;
    该分区的结束磁柱号(CYLINDER),占据
    06H的位6-7和07H的全部8位
    08H 4 分区起始相对扇区号
    0CH 4 分区总的扇区数

    硬盘分区表占据主引导扇区的64个字节(偏移01BEH--偏移01FDH),可以对四个分区的信息进行描述,其中每个分区的信息占据16个字节。具体每个字节的定义可以参见硬盘分区结构信息。下面是一个例子:

    如果某一分区在硬盘分区表的信息如下

    80 01 01 00 0B FE BF FC 3F 00 00 00 7E 86 BB 00

    则我们可以看到,最前面的"80"是一个分区的激活标志,表示系统可引导;"01 01 00"表示分区开始的磁头号为1,开始的扇区号为1,开始的柱面号为0;"0B"表示分区的系统类型是FAT32,其他比较常用的有04(FAT16)、07(NTFS);"FE BF FC"表示分区结束的磁头号为254,分区结束的扇区号为63、分区结束的柱面号为764;"3F 00 00 00"表示首扇区的相对扇区号为63;"7E 86 BB 00"表示总扇区数为12289662。

    对于现代大于8.4G的硬盘,CHS已经无法表示, BIOS使用LBA模式,对于超出的部分,CHS值通常设为 FEFFFF, 并加以忽略,直接使用08-0f的4字节相对值,再进行内部转换.

    结束标志字

    结束标志字55,AA(偏移1FEH-偏移1FFH)最后两个字节,是检验主引导记录是否有效的标志。

    主引导扇区的读取流程

    • 系统开机或者重启。
    1. BIOS 加电自检 ( Power On Self Test -- POST )。BIOS执行内存地址为 FFFF:0000H 处的跳转指令,跳转到固化在ROM中的自检程序处,对系统硬件(包括内存)进行检查。
    2. 读取主引导记录(MBR)。当BIOS检查到硬件正常并与 CMOS 中的设置相符后,按照 CMOS 中对启动设备的设置顺序检测可用的启动设备。BIOS将相应启动设备的第一个扇区(也就是MBR扇区)读入内存地址为0000:7C00H 处。
    3. 检查0000:7CFEH-0000:7CFFH(MBR的结束标志位)是否等于55AAH,若不等于则转去尝试其他启动设备,如果没有启动设备满足要求则显示"NO ROM BASIC"然后死机。
    4. 当检测到有启动设备满足要求后,BIOS将控制权交给相应启动设备。启动设备的MBR将自己复制到0000:0600H处, 然后继续执行。
    5. 根据MBR中的引导代码启动引导程序。
    • 事实上,BIOS不仅检查0000:7CFEH-0000:7CFFH(MBR的结束标志位)是否等于55AAH,往往还对磁盘是否有写保护、主引导扇区中是否存在活动分区等进行检查。如果发现磁盘有写保护,则显示磁盘写保护出错信息;如果发现磁盘中不存在活动分区,则显示类似如下的信息“Remove disk or other media Press any key to restart”。

    主引导记录与硬盘分区

    主引导记录的结构可以知道,它仅仅包含一个64个字节的硬盘分区表。由于每个分区信息需要16个字节,所以对于采用MBR型分区结构的硬盘,最多只能识别4个主要分区(Primary partition)。所以对于一个采用此种分区结构的硬盘来说,想要得到4个以上的主要分区是不可能的。这里就需要引出扩展分区了。扩展分区也是主要分区的一种,但它与主分区的不同在于理论上可以划分为无数个逻辑分区。

    扩展分区中逻辑驱动器的引导记录是链式的。每一个逻辑分区都有一个和MBR结构类似的扩展引导记录(EBR),其分区表的第一项指向该逻辑分区本身的引导扇区,第二项指向下一个逻辑驱动器的EBR,分区表第三、第四项没有用到。

    Windows系统默认情况下,一般都是只划分一个主分区给系统,剩余的部分全部划入扩展分区。这里有下面几点需要注意:

    • 在MBR分区表中最多4个主分区或者3个主分区+1个扩展分区,也就是说扩展分区只能有一个,然后可以再细分为多个逻辑分区。
    • 在Linux系统中,硬盘分区命名为sda1-sda4或者hda1-hda4(其中a表示硬盘编号可能是a、b、c等等)。在MBR硬盘中,分区号1-4是主分区(或者扩展分区),逻辑分区号只能从5开始。
    • 在MBR分区表中,一个分区最大的容量为2T,且每个分区的起始柱面必须在这个disk的前2T内。你有一个3T的硬盘,根据要求你至少要把它划分为2个分区,且最后一个分区的起始扇区要位于硬盘的前2T空间内。如果硬盘太大则必须改用GPT。

    MBR分区表与GPT分区表的关系

    与支持最大卷为2 TB(Terabytes)并且每个磁盘最多有4个主分区(或3个主分区,1个扩展分区和无限制的逻辑驱动器)的MBR磁盘分区的样式相比,GPT磁盘分区样式支持最大卷为128 EB(Exabytes)并且每磁盘的分区数没有上限,只受到操作系统限制(由于分区表本身需要占用一定空间,最初规划硬盘分区时,留给分区表的空间决定了最多可以有多少个分区,IA-64版Windows限制最多有128个分区,这也是EFI标准规定的分区表的最小尺寸)。与MBR分区的磁盘不同,至关重要的平台操作数据位于分区,而不是位于非分区或隐藏扇区。另外,GPT分区磁盘有备份分区表来提高分区数据结构的完整性。

    转载于:https://www.cnblogs.com/furzoom/p/MBR.html

    展开全文
  • 硬盘主引导记录详解

    2018-09-17 09:05:13
    说明:硬盘主引导记录独立于操作系统,但又和操作系统息息相关——很多时候它又是由; 操作系统所提供的工具所生成(例外的情况是您使用了其他的分区工具,不过它又运行在; 什么操作系统中呢?;()。;; 如果您安装了...

    说明:硬盘主引导记录独立于操作系统,但又和操作系统息息相关——很多时候它又是由
    ; 操作系统所提供的工具所生成(例外的情况是您使用了其他的分区工具,不过它又运行在
    ; 什么操作系统中呢?;()。
    ;
    ; 如果您安装了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 8D 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:06CF:整理扩展读所需入口参数,然后调用扩展读子程序
    ; 这段代码只有在以扩展读方式读取分区引导记录时才有机会获得执行
    0000:06C1 98 CBW 转换字节AL为字AX,执行后,AX中是一次要读的扇区数
    0000:06C2 91 XCHG CX,AX ;AX→CX,CX→AX,执行后,CX中是一次要读的扇区数
    0000:06C3 52 PUSH DX
    0000:06C4 99 CWD 将字AX转换为双字→DX,AX
    0000:06C5 034608 ADD AX,[BP+08]
    0000:06C8 13560A ADC DX,[BP+0A] 执行后,DX:AX=LBA绝对物理扇区号
    0000:06CB E81200 CALL 06E0 调用扩展读子程序
    0000:06CE 5A POP DX
    0000:06CF EBD5 JMP 06A6
    ;
    ; 0000:06D1~0000:06D8分区引导记录装入失败时的处理
    0000:06D1 4F DEC DI 计数器减1
    0000:06D2 74E4 JZ 06B8 五次读盘均未成功则转错误处理(注意这时SI=0)
    0000:06D4 33C0 XOR AX,AX ;置功能号
    0000:06D6 CD13 INT 13 复位磁盘系统
    0000:06D8 EBB8 JMP 0692 再读
    ;
    ;
    0000:06DA 00 00 80 49 12 00 ...I..
    ;
    ; 0000:06E0~0000:070C:使用扩展INT 13h功能读取分区引导记录的子程序
    ; 调用时,SP=7BFE。这段程序利用压栈寄存器方式构造了一个磁盘地址包,请注意体会。另外,0000:06FC处
    ; 的一条指令就释放了几乎全部由本段程序占用的栈空间,构思之巧妙,绝对需要我们学习!
    ; 所以,分析该段程序,一个重点应放在栈的变化上。
    0000:06E0 56 PUSH SI 保存SI——注意,这次压栈并不构造磁盘地址包
    0000:06E1 33F6 XOR SI,SI ;清零
    0000:06E3 56 PUSH SI
    0000:06E4 56 PUSH SI
    0000:06E5 52 PUSH DX
    0000:06E6 50 PUSH AX 以上四条指令压栈的是扇区LBA号码*2
    0000:06E7 06 PUSH ES 压栈内存目标缓冲区首址段址
    0000:06E8 53 PUSH BX 压栈内存目标缓冲区首址偏移
    0000:06E9 51 PUSH CX 压栈所读扇区数
    0000:06EA BE1000 MOV SI,0010 ;注意SI的高8位对应着磁盘地址包的保留字节,必须为0
    0000:06ED 56 PUSH SI 压栈磁盘地址包包长,执行完本条指令一个包已经构造完毕
    0000:06EE 8BF4 MOV SI,SP ;规定磁盘地址包偏移指针,这时SP=7BEA
    0000:06F0 50 PUSH AX 保存AX
    0000:06F1 52 PUSH DX 保存DX
    0000:06F2 B80042 MOV AX,4200 ;置扩展读功能号
    0000:06F5 8A5624 MOV DL,[BP+24] 取驱动器号,参照0000:0683
    ; 入口参数:AH=功能号,02为读盘操作;DL=驱动器号
    ; DS:SI=16字节磁盘地址包——第0字节:包长度(固定为10h);第1字节:保留,必须为0;
    ; 第2、3字节:所读扇区数;第4~5字节:内存目标缓冲区首址偏移;
    ; 第6~7字节:内存目标缓冲区首址段址; 第8~15字节:扇区LBA号码
    ; 出口参数:成功则AH=0;错误则AH=错误代码
    0000:06F8 CD13 INT 13 执行扩展读操作
    0000:06FA 5A POP DX
    0000:06FB 58 POP AX
    0000:06FC 8D6410 LEA SP,[SI+10] 7BEA+10h=7BFA→SP(注意是取偏移而不是取单元内容)
    0000:06FF 720A JB 070B 扩展读不成功转
    0000:0701 40 INC AX
    0000:0702 7501 JNZ 0705
    0000:0704 42 INC DX AX加1溢出时(比如0FFFFh+1)DX才加1
    0000:0705 80C702 ADD BH,02 ;调整BX,使偏移量增加512字节(刚好一扇区)
    0000:0708 E2F7 LOOP 0701 0701~0708一段代码暂未明白其真实意图!
    0000:070A F8 CLC
    0000:070B 5E POP SI
    0000:070C C3 RET
    ;
    ; 0000:070D:中继跳转
    0000:070D EB74 JMP 0783
    ;
    ; 070F~0745是错误信息!果然是中文Windows98生成的主引导记录,所以我要特别
    ; “感谢”微软这个傻B,真难为它竟然用中文表述前两个信息!可惜真需显示的时
    ; 候鬼才能看懂是什么呢!!!我K!——耍弄我们耶!?
    ; 070F~0718:“分区表无效”中文信息
    ; 071A~072B:“加载操作系统时出错”中文信息
    ; 072D~0744:“Missing operating system”英文信息
    0000:070F B7 .
    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 system..........
    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 ...
    ;
    ; 0000:0783~0000:0789:控制权移交
    0000:0783 8BFC MOV DI,SP ;
    0000:0785 1E PUSH DS
    0000:0786 57 PUSH DI 构造一个跳转地址
    0000:0787 8BF5 MOV SI,BP ;
    0000:0789 CB RETF ;交控制权给分区引导记录(0000:7C00)
    ;
    ;
    0000:078A 00 00 00 00 00 00 ......
    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 ................
    ;
    ; 07B8~07BB四个字节的内容用于什么呢?(不同机器此四字节均不同)
    ; 07BE~07FD为分区表,内含四个分区表项(每表项10h字节)
    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.

    1:因为物理扇区号总是从1排列而起
    2:由此可见,就是使用LBA扩展读的功能,主引导记录却限制了分区引导扇区必须在LBA绝对物理扇区
    0FFFFFFFFh之前才有可能从该分区引导系统!

    转载于:https://blog.51cto.com/13287419/2175889

    展开全文
  • 硬盘主引导记录MBR

    千次阅读 2019-03-19 16:44:19
    主引导记录:(MBR,Main Boot Record)是位于磁盘最前边的一段引导(Loader)代码。它负责磁盘操作系统(DOS)对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统(DOS)在对硬盘进行初始化时...

    主引导记录:(MBR,Main Boot Record)是位于磁盘最前边的一段引导(Loader)代码。它负责磁盘操作系统(DOS)对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统(DOS)在对硬盘进行初始化时产生的。

    简介

    通常,我们将保含MBR引导代码的扇区称为主引导扇区。因这一扇区中,引导代码占有绝大部分的空间,故而将习惯将该扇区称为MBR扇区(简称MBR)。主要由3个部分组成(共占用512个字节):

    1. 主引导程序即主引导记录(MBR)(占446个字节):可在FDISK程序中找到,它用于硬盘启动时将系统控制转给用户指定的并在分区表中登记了的某个操作系统;主引导程序(偏移地址0000H--0088H),它负责从活动分区中装载,并运行系统引导程序。出错信息数据区,偏移地址0089H--00E1H为出错信息,00E2H--01BDH全为0字节。
    2. 磁盘分区表项(DPT,Disk Partition Table):由4个分区表项构成,偏移地址01BEH--01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4;
    3. 结束标志(占2个字节):偏移地址01FE--01FF的2个字节。其值为AA55,存储时低字节在前,高位在后,即看上去是55AA(十六进制)。

     

    MBR中的分区信息结构

    偏移地址01BEH--01FDH的64个字节,为4个分区项内容(分区信息表)。它是由磁盘介质类型及用户在使用 FDISK定义分区说确定的。在实际应用中,FDISK对一个磁盘划分的主分区可少于4个,但最多不超过4个。

    分区项表(16字节)

     

    MBR的主要功能及工作流程

    启动代码:主引导记录最开头是第一阶段引导代码。其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后将控制权交给硬盘上的引导程序(如GNU GRUB)。 它不依赖任何操作系统,而且启动代码也是可以改变的,从而能够实现多系统引导。

    启动PC机时,系统首先对硬件设备进行测试,测试成功后进入自举程序INT 19H,然后读系统磁盘0柱面、0磁头、1扇区的主引导记录(MBR)内容到内存指定单元0:7C00地址开始的区域,并执行MBR程序段。
    硬盘的主引导记录(MBR)是不属于任何一个操作系统的,它先于所有的操作系统而被调入内存,并发挥作用,然后才将控制权交给主分区(活动分区)内的操作系统,并用主分区信息表来管理硬盘。
    MBR程序段的主要功能如下:

    • 检查硬盘分区表是否完好。
    • 在分区表中寻找可引导的“活动”分区。
    • 将活动分区的第一逻辑扇区内容装入内存。在DOS分区中,此扇区内容称为DOS引导记录(DBR)。

    硬盘逻辑驱动器的分区表链结构
    硬盘的分区规则是:一个分区的所有扇区必须连续,硬盘可以有最多4个物理上的分区,这4个物理分区可以是4个主分区或者3个主分区加一个扩展分区。在DOS/Windows管理下的扩展分区里,可以而且必须再继续划分逻辑分区(逻辑盘)。
    从MS-DOS3.2问世以后,用户就可以在一个物理硬盘驱动器上划分一个主分区和一个扩展分区,并在扩展分区上创建多个逻辑驱动器,也即我们常说的一个物理盘上多个逻辑盘。

    主引导扇区的读取流程

    系统开机或者重启时主引导扇区的读取流程如下所述

     

    1. BIOS 加电自检 ( Power On Self Test -- POST )。BIOS执行内存地址为 FFFF:0000H 处的跳转指令,跳转到固化在ROM中的自检程序处,对系统硬件(包括内存)进行检查。
    2. 读取主引导记录(MBR)。当BIOS检查到硬件正常并与 CMOS 中的设置相符后,按照 CMOS 中对启动设备的设置顺序检测可用的启动设备。BIOS将相应启动设备的第一个扇区(也就是MBR扇区)读入内存地址为0000:7C00H 处。
    3. 检查0000:7CFEH-0000:7CFFH(MBR的结束标志位)是否等于55AAH,若不等于则转去尝试其他启动设备,如果没有启动设备满足要求则显示“NO ROM BASIC”然后死机。
    4. 当检测到有启动设备满足要求后,BIOS将控制权交给相应启动设备。启动设备的MBR将自己复制到0000:0600H处,然后继续执行。
    5. 根据MBR中的引导代码启动引导程序。

    事实上,BIOS不仅检查0000:7CFEH-0000:7CFFH(MBR的结束标志位)是否等于55AAH,往往还对磁盘是否有写保护、主引导扇区中是否存在活动分区等进行检查。如果发现磁盘有写保护,则显示磁盘写保护出错信息;如果发现磁盘中不存在活动分区,则显示类似如下的信息“Remove disk or other media Press any key to restart”。

    主引导记录与硬盘分区

    从主引导记录的结构可以知道,它仅仅包含一个64个字节的硬盘分区表。由于每个分区信息需要16个字节,所以对于采用MBR型分区结构的硬盘,最多只能识别4个主要分区(Primary partition)。所以对于一个采用此种分区结构的硬盘来说,想要得到4个以上的主要分区是不可能的。这里就需要引出扩展分区了。扩展分区也是主要分区的一种,但它与主分区的不同在于理论上可以划分为无数个逻辑分区。

    MBR分区表与GPT分区表的关系

    与支持最大卷为2 TB(Terabytes)并且每个磁盘最多有4个主分区(或3个主分区,1个扩展分区和无限制的逻辑驱动器)的MBR磁盘分区的样式相比,GPT磁盘分区样式支持最大卷为128 EB(Exabytes)并且每磁盘的分区数没有上限,只受到操作系统限制(由于分区表本身需要占用一定空间,最初规划硬盘分区时,留给分区表的空间决定了最多可以有多少个分区,IA-64版Windows限制最多有128个分区,这也是EFI标准规定的分区表的最小尺寸)。与MBR分区的磁盘不同,至关重要的平台操作数据位于分区,而不是位于非分区或隐藏扇区。另外,GPT分区磁盘有备份分区表来提高分区数据结构的完整性。

     

    备注:参照百度百科。

    展开全文
  • 课程名称数据备份与恢复知识点MBR的结构和作用四川邮电职业技术学院 成友才windows主引导记录MBRMBR磁盘都有一个引导扇区其主要内容是主引导记录Main Boot Record简称MBR扇区MBR扇区位于整个硬盘的第一个扇区共占用...
  • Linux系统修复之mbr主引导记录丢失
  • 修复主引导记录

    2008-01-22 10:36:46
    小巧的,可以修复被损害的主引导记录的的软件
  • 使用Python阅读主引导记录 这是为在DC3挑战中使用而编写的。 它已经在Windows 7和Linux上进行了测试。 要在Windows上解析驱动器,请按如下所示打开磁盘: : 例如: python mbr.py \\.\PhysicalDrive0 或者,...
  • 主引导记录、启动扇区

    千次阅读 2019-04-01 19:27:58
    主引导记录(Master Boot Record):又称主引导分区、主引导扇区。在0磁头Head、0柱面Cylinder(磁道Track)、1扇区Sector。每块硬盘,对,每块硬盘不是每个分区,都只有一个主引导扇区,即该硬盘0号柱面,0号磁头的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,659
精华内容 1,463
关键字:

主引导记录