Boot Sector

发表于:2007-05-26来源:作者:点击数: 标签:
Boot Sector结构、系统启动过程简介 解决困扰已久的系统启动过程,可以帮助使多系统共存,而不影响各自启动! Boot Sector 结构、系统启动过程简介 一. Boot Sector 的组成 Boot Sector 也就是硬盘的第一个扇区 (注 1 : 0 柱面, 0 磁道, 1 扇区) (注 2

Boot Sector结构、系统启动过程简介

解决困扰已久的系统启动过程,可以帮助使多系统共存,而不影响各自启动!

Boot Sector结构、系统启动过程简介

一.
Boot Sector 的组成

   Boot Sector
也就是硬盘的第一个扇区(注10柱面,0磁道,1扇区) (注2 1磁道=16扇区,1扇区=512字节), 它由 MBR (Master Boot Record), DPT (Disk Partition Table) Boot Record ID  三部分组成.
   MBR
又称作主引导记录占用 Boot Sector 的前 446 个字节 ( 0 to 0x1BD ),
存放系统主引导程序 (它负责检查硬盘分区表、寻找可引导分区并负责将可引导分区的引导扇区(DBR)装入内存).
   DPT
即主分区表占用 64 个字节 (0x1BE to 0x1FD), 记录了磁盘的基本分区
信息. 主分区表分为四个分区项, 每项 16 字节, 分别记录了每个主分区的信息
(
因此最多可以有四个主分区).
   Boot Record ID
即引导区标记占用两个字节 (0x1FE and 0x1FF), 对于合法
引导区, 它等于 0xAA55, 这是判别引导区是否合法的标志.
   Boot Sector
的具体结构如下图所示:
     0000  |------------------------------------------------|
           |                                                |
           |                                                |
           |             Master Boot Record                 |
           |                                                |
           |                                                |
           |            
主引导记录(446字节)                |
           |                                                |
           |                                                |
           |                                                |
     01BD  |                                                |
     01BE  |------------------------------------------------|
           |                                                |
     01CD  |            
分区信息  1(16字节)                |
     01CE  |------------------------------------------------|
           |                                                |
     01DD  |            
分区信息  2(16字节)                |
     01DE  |------------------------------------------------|
           |                                                |
     01ED  |            
分区信息  3(16字节)                |
     01EE  |------------------------------------------------|
           |                                                |
     01FD  |            
分区信息  4(16字节)                |
           |------------------------------------------------|
           | 01FE                | 01FF                     |
           |         55          |           AA             |
           |------------------------------------------------|

. 系统启动过程简介

   
系统启动过程主要由一下几步组成(以硬盘启动为例):

   1.
开机
   2. BIOS
加电自检 ( Power On Self Test -- POST )
     
内存地址为 0ffff:0000
   3.
将硬盘第一个扇区 (001扇区, 也就是Boot Sector)
     
读入内存地址 0000:7c00 .(注3:遇到最后两个字节55 AA读入内存执行
   4.
检查 (WORD) 0000:7dfe 是否等于 0xaa55, 若不等于
     
则转去尝试其他启动介质, 如果没有其他启动介质则显示
      "No ROM BASIC"
然后死机.
   5.
跳转到 0000:7c00 处执行 MBR 中的程序.
   6. MBR
首先将自己复制到 0000:0600 , 然后继续执行.
   7.
在主分区表中搜索标志为活动的分区. 如果发现没有活动
     
分区或有不止一个活动分区, 则转停止.
   8.
将活动分区的第一个扇区读入内存地址 0000:7c00 .

(注4在分区表的四个记录中,一般来说有且只有一个记录的标记是活动的,MBR主要负责从活动分区中装载并运行系统引导程序)会去找到这个分区记录,根据记录的起始扇区加载该分区的逻辑 0 扇区(起始扇区)的内容到 0x07C0:0000,并且执行 JUMP 0x07C0:0000(按照规范,BOOT RECORD 也应该从 0x07C0:0000 处开始执行,所以 MBR 通常都要先将自己搬移,以腾出位置去加载 BOOT RECORD)。控制权切换到 BOOT RECORDBOOT RECORD(包括boot loadergrub或lilo ) linux 为例,它会读取 linux 内核镜像到地址 0x9000:0000,然后开始切换到 0x9000:0000 继续运行。 MS-DOS 为例,则它会读取文件系统根目录下的 IO.SYS MSDOS.SYS 两个文件然后加载到内存中继续运行。
   9. 检查 (WORD) 0000:7dfe 是否等于 0xaa55, 若不等于则
     
显示 "Missing Operating System" 然后停止, 或尝试
     
软盘启动.
   10.
跳转到 0000:7c00 处继续执行特定系统的启动程序.
   11.
启动系统 ...

   
以上步骤中 2,3,4,5 步是由 BIOS 的引导程序完成. 6,7,8,9,10
步由MBR中的引导程序完成.

   
一般多系统引导程序 ( SmartFDISK, BootStar, PQBoot )
都是将标准主引导记录替换成自己的引导程序, 在运行系统启动程序
之前让用户选择要启动的分区.
   
而某些系统自带的多系统引导程序 ( lilo, NT Loader )
则可以将自己的引导程序放在系统所处分区的第一个扇区中, Linux
中即为 SuperBlock (其实 SuperBlock 是两个扇区).
   
: 以上各步骤中使用的是标准 MBR, 其他多系统引导程序的引导过程与此不同.

5:一些早期的引导型病毒,以及某些 bootloader,还有些硬盘加密卡,他们会修改 MBR,做个钩子出来。

原文转自:http://www.ltesting.net