1、限制
主引导程序的代码量不能超过512字节!!!
2、突破限制的思路
- 主引导程序
- 完成最基本的初始化工作
- 从存储介质中加载程序到内存中
- 将控制权交由新加载的程序执行
- ……
3、问题
主引导程序如何加载存储介质中的其它程序?
4、文件系统
存储介质上组织文件数据的方法(数据组织的方式)
5、文件系统示例
- FAT12是DOS时代的早期文件系统
- FAT12结构非常简单,一直沿用于软盘
- FAT12的基本组织单位
- 字节(Byte):基本数据单位
- 扇区(Sector):磁盘中的最小数据单元
- 簇(Cluster):一个或多个扇区
6、解决方案
- 使用FAT12对软盘( data.img )进行格式化
- 编写可执行程序(Loader)并将其拷贝到软盘中
- 主引导程序(Boot)在文件系统中查找Loader
- 将Loader复制到内存中,并跳转到入口处执行
7、实验:往虚拟软盘中写入文件
- 原材料:FreeDos, Bochs , bximage
- 步骤:
- 创建虚拟软盘data.img
- 在FreeDos中进行格式化(FAT12)
- 将data.img挂载到Linux中,并写收入文件
8、编程实验:将文件写入虚拟软盘
9、下一步的工作
Boot查找目标文件(Loader),并读取文件的内容!
10、深入FAT12文件系统
FAT12文件系统由引导区,FAT表,根目录项表和文件数据区组成。
11、FAT12的主引导区
主引导区存储的比较重要的信息是文件系统的类型,文件系统逻辑扇区总数,每簇包含的扇区数,等。
主引导区最后以0x55AA两个字节 作为结束,共占用一个扇区。
12、实验:读取data.img中的文件系统信息
- 步骤:
- 创建Fat12Header结构体类型
- 使用文件流读取前512字节的内容
- 解析并打印相关的信息
13、编程实验:读取FAT12文件系统信息
14、实验结论
1. FreeDos中的format程序在格式化软盘的时候自动在第0扇区生成了一个主引导程序,这个主引导程序只打印一个字符串
2. 文件格式和文件系统都是用于定义数据如何存放的规则,只要遵循这个规则就能够成功读写目标数据
15、小结
- 主引导程序的代码量不能超过512字节
- 可以通过主引导程序加载新程序的方式突破限制
- 加载新程序需要依赖于文件系统
- FAT12是一种早期用于软盘的简单文件系统
- FAT12文件系统的重要信息存储于 0 扇区