[转帖]引导扇区--MBR_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3202 | 回复: 0   主题: [转帖]引导扇区--MBR        下一篇 
ying
注册用户
等级:上尉
经验:694
发帖:59
精华:0
注册:2012-10-12
状态:离线
发送短消息息给ying 加好友    发送短消息息给ying 发消息
发表于: IP:您无权察看 2012-11-6 15:05:51 | [全部帖] [楼主帖] 楼主

     硬盘的0柱面、0磁头、1扇区称为主引导扇区,FDISK程序写到该扇区的内容称为主引导记录(MBR)。该记录占用512个字节,它用于硬盘启动时将系统控制权交给用户指定的,并在分区表中登记了的某个操作系统区。

硬盘的引导记录(MBR)是不属于任何一个操作系统,也不能用操作系统提供的磁盘操作命令来读取它,在windows下可以使用WinHex查看和修改,linux下用dd吧。硬盘的0磁道0柱面1扇区包括硬盘主引导记录 MBR(Main Boot Record)和分区表DPT(Disk Partition Table)。其中主引导记录的作用就是检查分区表是否正确以及确定哪个分区为引导分区,并在程序结束时把该分区的启动程序(也就是操作系统引导扇区)调入内存加以执行。

主引导扇区释疑

关键词:引导扇区、主引导扇区、主引导记录、硬盘分区表。

引导扇区在每个分区里都存在,但是我们常说的*主引导扇区*是硬盘的第一物理扇区。它由两个部分组成:即主引导记录MBR和硬盘分区表DPT。在总共512 字节的主引导分区里其中MBR占446个字节(偏移 0--偏移1BDH),DPT占64个字节(偏移1BEH--偏移1FDH),最后两个字节 “55,AA”(偏移1FEH)是分区的结束标志。大致的结构如下图:
0000 |------------------------------------------------|
| |
| | |Main Boot Record |
| |
| | |主引导记录(446字节) |
| |
01BD | |
01BE |------------------------------------------------|
| |
01CD | 分区信息 1(16字节) |
01CE |------------------------------------------------|
| |
01DD | 分区信息 2(16字节) |
01DE |------------------------------------------------|
| |
01ED | 分区信息 3(16字节) |
01EE |------------------------------------------------|
| |
01FD | 分区信息 4(16字节) |(这里可以看到,主分区个数最多是4个)

|------------------------------------------------|
| 01FE | 01FF |(错误信息)
| 55 | AA |
|------------------------------------------------|

主引导记录中包含了硬盘的一系列参数和一段引导程序。引导程序主要是用来在系统硬件自检完后引导具有激活标志的分区上的操作系统。它执行到最后的是一条JMP指令跳到操作系统的引导程序去。这里往往是引导型病毒的注入点,也是各种多系统引导程序的注入点。但是由于引导程序本身完成的功能比较简单,所以我们可以完全地判断该引导程序的合法性 (看JMP指令的合法性),因而也易于修复。象命令 fdisk/mbr可以修复MBR和KV300这类软件可以查杀任意类型的引导型病毒,就是这个原因。

往下来是硬盘的分区表,由4个16字节的分区信息表组成。
北京联动北方科技有限公司
最后的两个标志“55 AA”是分区表的结束标志,如果这两个标志被修改(有些病毒就会修改这两个标志),则系统引导时将报告找不到有效的分区表。

所以整个MBR是这样组成的:MBR+DPT+MagicNumber(446+64+2=512)


下面简单介绍一下系统启动的引导步骤,系统启动过程主要由一下几步组成(以硬盘启动为例):
1. 开机 :-)
2. BIOS 加电自检( Power On Self Test -- POST ),内存地址为 0ffff:0000
3. 将硬盘第一个扇区(0头0道 1扇区, 也就是Boot Sector),读入内存地址 0000:7c00 处。
4. 检查 (WORD) 0000:7dfe 是否等于0xaa55, 若不等于则转去尝试其他启动介质, 如果没有其他启动介质则显示"No ROM BASIC" 然后死机.
5. 跳转到 0000:7c00 处执行 MBR 中的程序.
6. MBR首先将自己复制到 0000:0600 处, 然后继续执行.
7. 在主分区表中搜索标志为活动的分区。如果发现没有活动分区或有不止一个活动分区, 则转停止.
8. 将活动分区的第一个扇区读入内存地址 0000:7c00 处.
9. 检查 (WORD) 0000:7dfe 是否等于 0xaa55, 若不等于则显示 "Missing Operating System" 然后停止, 或尝试软盘启动.
10. 跳转到 0000:7c00 处继续执行特定系统的启动程序.
11. 启动系统 ...

是不是有点冲动。。,从网上摘抄一段引导程序,看样子是没什么问题,但是这个不是轻易就可以试的,改过MBR后,怎么改回来?

写入MBR的引导程序:

entry start
start:
mov ax,#0xb800
mov es,ax
seg es
mov [0],#0x41
seg es
mov [1],#0x1f
loop1: jmp loop1


再来一个C语言的写MBR程序

#include /* unistd.h 需要这个文件 */
#include /* 包含有read和write函数 */
#include
int main()
{
      char boot_buf[512];
      int floppy_desc, file_desc;
      file_desc = open("./boot", O_RDONLY);
      read(file_desc, boot_buf, 510);
      close(file_desc);
      boot_buf[510] = 0x55;
      boot_buf[511] = 0xaa;
      floppy_desc = open("/dev/fd0", O_RDWR);
      lseek(floppy_desc, 0, SEEK_CUR);
      write(floppy_desc, boot_buf, 512);
      close(floppy_desc);
}


用软盘启动系统,系统成功引导后应该会出现'A'字符。

笔者用winhex 查看了MBR的内容,从这部分内容可以看到,笔者的MBR里面是GRUB的引导程序,最后位置0X01FE上确实是55AA。

附图:

北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论