D_D系统构建-MBR(1)
来源:互联网 发布:策略经营单机手游 知乎 编辑:程序博客网 时间:2024/06/05 03:09
MBR,英文含义:Main Boot Record),主引导纪录,是位于磁盘最前边的一段引导(Loader)代码,一般写于磁盘第一个扇区处,且最后两个 字节为0xAA55。它是我们的系统上电后第一个运行的磁盘程序(在它前面实际还有很多固件程序,bios等,主要完成硬件自检工作,这阶段发生任何异常,比如内存异常,显卡异常,磁盘异常等均会中止,当然这一块我们不关注,也无法干预),最简单的理解就看成是由我们的pc把它加载到内存地址0:0x7c00处,然后将执行权利交由它来运行。
MBR到内存的映射关系:
这个扇区因为只有512字节,实际可用只有446字节,后面64字节是分区表,最后以0xaa55结束,很明显无法完成复杂的操作,因此它的使命一般是加载第二个程序,将控制权交由第二个程序运行,比如我们这里的Loader.
MBR结构:
因为我们只有一个磁盘,所以64字节的分区表可以进行直接覆盖,毕竟我们只是尝试,在后面熟悉了后,可以进一步了解这个分区表并使用它来定位到每一个分区(所谓分区,就类似我们在window上习惯将一个硬盘划分为c盘,D盘等,而分区表则是纪录每个分区的起始位置,大小等信息)
当然我们为了让它能加载 loader,会要求它按照我们的文件系统来查询Loader,读取Loader文件到指定内存区域,并将控制权交由它。
这里,我可以告诉你,加上这个文件系统读取,总字节肯定会超过512字节,你要是强制从第一扇区开始写,紧跟着的是扇区里面内容还记得吗?那是我们的文件系统区,这样肯定会破坏文件系统内容,严重的导致无法查询到Loader文件。
MBR禁止覆盖区域(标红处):
那就没有办法了吗?
办法肯定有,软件上从来就没有搞不定的办法。其实很简单。我们规定了我们只用4096个扇区(编号从0开始,范围0-4095),换成字节就是4096*512=2M字节,我们的磁盘实际会分配10M,可以把mbr超出512字节的写到4096开始的扇区中,这样在运行mbr时,第一件事就是把4096开始的加载到0x7e00开始处,对应上图中的RSV区域。
很明显,这里面还需要获取mbr的总长度,或者总扇区数目,这些都简单。
这样,我们的磁盘利用会变成这样:
其中,MBR-1与MBR-2共同组成MBR,
总结起来,对MBR我们需要处理的事情为:1.MBR超过512字节时,如何 写入磁盘中。2.在系统读取第一个扇区到内存0x7c00时,如何保证该扇区的mbr标识0xaa55存在,否则系统无出错。2. 加载到内存后,如何知道自己的总长度并能把自己剩余的内存全部加载进内存中。
下一章节,会一一解决这些问题。届时,我们将逐步介绍nasm, dd bochs等工具。大家要使用时,可提前通过apt-get工具来安装nasm bochs ; dd工具为ubuntu自带,不需要安装 。
- D_D系统构建-MBR(1)
- D_D系统构建-MBR(3)代码
- D_D系统构建-MBR(4)代码剖析
- D_D系统构建-MBR(6)加载loader文件代码MBR解析
- D_D系统构建-文件系统
- D_D系统构建-篇外话
- D_D系统构建-MBR(7)加载loader文件代码filesystem.inc解析
- D_D系统构建-简述及环境准备
- D_D系统构建-文件分布及说明
- D_D系统构建-文件写入方法
- D_D系统构建-开发文件目录结构
- D_D系统构建-loader保护模式修改
- D_D系统构建-MBR(8)filesystem.inc代码整改适配32位(附提供当前整个开发目录文件)
- D_D系统构建-Loader的保护模式尝试
- DD_系统构建-MBR(2) 流程
- 从系统分区镜像文件构建MBR
- DD系统构建-MBR(5)加载loader文件
- 系统引导 - MBR引导代码研究(1)
- 求两个整型二进制中有多少个不同位
- 机器学习之——单变量线性回归
- CentOS7.3编译安装NodeJS6.10
- 【mybatis】:mybatis中$和#符号的区别与联系
- 计算机网络:端到端原则对互联网的影响与面临的问题
- D_D系统构建-MBR(1)
- 线程池
- AVL树详解&面试题-判断一棵树是否是平衡二叉树
- [paper] Co-CNN
- Centos-Tomcat配置APR
- 线性表
- C# DataSet和DataTable详解
- java 日期转换校验
- Java+Selenium3方法篇24-单选和多选按钮操作