很多朋友对于硬盘的主引导扇区里的MBR(Main Boot Record)和DPT
(Disk Partition Table)的区别有些分不太清。于是我想把它写个简短的
介绍,希望能对这些朋友有点帮助。

引导扇区在每个分区里都存在,但是我们常说的*主引导扇区*是硬盘的
第一物理扇区。它由两个部分组成:即主引导记录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
这类软件可以查杀任意类型的引导型病毒,就是这个原因。

往下来是硬盘的分区表,由4个16字节的分区信息表组成。每个信息表的
结构如下:

偏移 长度 所表达的意义
0 字节 分区状态: 如0-->非活动分区
80--> 活动分区
1 字节 该分区起始头(HEAD)
2 字 该分区起始扇区和起始柱面
4 字节 该分区类型:如82--> Linux Native分区
83--> Linux Swap 分区
5 字节 该分区终止头(HEAD)
6 字 该分区终止扇区和终止柱面
8 双字 该分区起始绝对分区
C 双字 该分区扇区数

最后的两个标志“55 AA”是分区表的结束标志,如果这两个标志被修改
(有些病毒就会修改这两个标志),则系统引导时将报告找不到有效的分区表。

由上面的所列出的结构可以大致地了解主引导扇区的结构和用途。下面,
有一些关于主引导扇区的常见问题:

Q1、fdisk/mbr 会不会把硬盘的分区表破坏呀?
A: 从上面的土一我们可以看到fdisk/mbr是不会影响到DPT的。fdisk/
mbr只是把主引导分区里的MBR部分重新写过,而不会对DPT有任何破坏。

Q2、在Linux里有一种方法可以恢复MBR是用如下的命令:
dd if=/boot/boot.NNNN of=/dev/hda bs=446 count=1
其中bs(buffer size)是指重写的字节数。为什么不是512
呢?主引导扇区是一个扇区(512字节呀)?
A: 答案是因为我们用上面的命令是为了修复可能被病毒修改了的主引导记
录MBR,或者想把LILO卸载掉,而不是恢复整个主引导扇区。所以我们
只把主引导扇区的备份文件boot.NNNN的前446个字节重写入主引导扇区。
boot.NNNN是我们在安装Linux之前整个主引导分区的备份。如果我们把
512个字节全部写入主引导扇区就可能会把安装了Linux后改变了的硬盘
DPT表也破坏掉。那就坏事了。 :-)

linuxrat补充一些:=)...

MBR-> Main/Master Boot Record, 有些书上是写成Master的.
我认为可以分成三个部分吧, MBR+DPT+MagicNumber(446+64+2=512)
这也就是为什么进行MBR备份的时候要指定bs=512 或者 bs=1k, count=1的原因.
然后恢复时经常看到HOWTO里面是bs=446 count=1. 这个446就是指令部分的恢复,
不是DPT的恢复. 往往MBR里面的第一个指令是cli... 研究起来是比较有意思的.

转载于:https://www.cnblogs.com/MaxWoods/archive/2006/02/22/335128.html

主引导扇区(MBR)释疑相关推荐

  1. Linux系统主引导扇区MBR详解

    简介 在硬盘中,硬盘的0柱面0磁头第一个1扇区称为主引导扇区,也叫主引导记录-MBR(main boot record),其中MBR是以下三个部分组成 1.Bootloader,主引导程序(446个字 ...

  2. 主引导扇区(MBR),分区表(DPT)及活动分区(DBR)

    主引导扇区:硬盘的0柱面.0磁头.1扇区(也叫主引导记录MBR),大小为512Byte. 分区表(DPT):位于主引导分区,从偏移01BEH开始到偏移01FDH结束的64字节. 活动分区DBR:DBR ...

  3. linux 汇编 读取软盘,[Linux]dd 读写软盘:在软盘主引导扇区写入显示hello world的二进制代码数据...

    代码效果 在软盘主引导扇区写入显示 hello world 的二进制代码数据 命令行操作 第一步,格式化软盘,/dev/fd0是软盘的名字 $ sudo fdformat /dev/fd0 $ sud ...

  4. 主引导扇区及主引导记录MBR的详细说明

    引导扇区在每个分区里都存在,但是我们常说的*主引导扇区*是硬盘的 第一物理扇区.它由两个部分组成:即主引导记录MBR和硬盘分区表DPT.在 总共512字节的主引导分区里其中MBR占446个字节(偏移0 ...

  5. 第五章 编写主引导扇区代码

    本章的思路是,在本机上上写一段代码(这些代码的意义是往显存中写一些数据)-->编译成bin文件-->写入到vhd硬盘的引导扇区(即第一扇区,见第四章详述)-->开机从硬盘启动,从而执 ...

  6. 【OS学习笔记】三十七 保护模式十:中断和异常的处理与抢占式多任务对应的汇编代码----主引导扇区代码

    本文是以下几篇文章对应的主引导扇区代码汇编代码: [OS学习笔记]三十四 保护模式十:中断和异常区别 [OS学习笔记]三十五 保护模式十:中断描述符表.中断门和陷阱门 [OS学习笔记]三十六 保护模式 ...

  7. [Intel汇编-NASM]主引导扇区程序介绍

    1. 主引导扇区的作用以及开机之后的大致流程: 1) 为了学习实模式下的编程而不受操作系统的影响,因为在正常的开机后,经过主引导扇区的对操作系统的加载就会把计算机的控制权交给操作系统从而进入保护模式, ...

  8. 【OS学习笔记】二十 保护模式六:保户模式下操作系统内核如何加载用户程序并运行 对应的汇编代码之主引导扇区程序

    本汇编代码对应保户模式下操作系统内核如何加载用户程序并运行 的实际主引导扇区代码: 对应的内核代码在:内核代码 对应的用户程序代码在:用户程序代码 ;代码清单13-1;文件名:c13_mbr.asm; ...

  9. 【OS学习笔记】八 实模式:编写主引导扇区代码-另一种更高效的写法

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 上一篇文章,我们用比较原始的方法编写了主引导扇区的代码.点击链接查看 ...

  10. 【OS学习笔记】六 实模式:编写主引导扇区代码

    上一篇文章学习了:计算机的启动过程(点击链接查看上一篇文章) 这篇文章学习记录为:编写主引导扇区代码. 参考:<X86汇编语言-从实模式到保护模式>-李忠.纯学习笔记,更详细内容请阅读正版 ...

最新文章

  1. 干货:Android 源码使用心得分享
  2. ZK textbox Constraint验证
  3. puppet子命令介绍
  4. 别等了,全面「远程办公」凉了
  5. QT5更改应用程序图标
  6. 【工程项目经验】之32/64位平台printf uint64的方法
  7. 堆栈用数组和用链表实现
  8. 微信小程序实现商品数量加减案例
  9. 参数化三维管网建模系统MagicPipe3D
  10. Java 使用OpenCV进行颜色识别
  11. java去掉字符串的逗号_java – 从字符串数组中删除逗号
  12. winXP系统( 联想)台式电脑自动开机、关机图文详细解(三)
  13. RabbitMQ之Channel
  14. 跟狗屎一样的代码,到底该如何重构?
  15. Linux中的setenv与export
  16. Java使用ffmpeg进行音频格式转换
  17. 网络工程师资料-永久有效
  18. 【trick 5】warmup —— 一种学习率调优方法
  19. 能上Q不能上网解决方案
  20. web常见错误解决方法

热门文章

  1. ESLint 规则详解(二)
  2. oracle 简单job
  3. [C#][SAMPLE][CODE][Control]RadioBox、CheckBox和Validating事件的相关处理
  4. Eclipse启动运行速度调优
  5. java基础杂谈(一)
  6. GDAL建立GeoTIFF金字塔文件
  7. Spring - DI循环依赖
  8. Windows10远程连接服务器时出现“这可能是由于CredSSP加密数据库修正”的错误提示的解决办法
  9. JavaWeb之Servlet编程
  10. SpringAOP 学习笔记