交流
商城
MCN
登入
注册
首页
提问
分享
讨论
建议
公告
动态
发表新帖
发表新帖
3 MBR分区说明
分享
未结
0
1210
李延
LV6
2022-06-24
悬赏:20积分
# 1 说明 **主引导记录**(Master Boot Record,缩写:MBR)。又叫做**主引导扇区**,是计算机开机后访问硬盘时所必须要读取的首个扇区,它在硬盘上的三维地址为(柱面,磁头,扇区)=(0,0,1)。 MBR 根据 引导扇区 将 磁盘最多分为4个分区,对应在我们电脑上就是不同的盘如:c盘、D盘。同时引导扇区的点440个字符为代码区,也就是我们之前写的代码区域。 在计算机启动时,bios会自动识别,如果你的磁盘主引导扇区结尾字符为0x55AA,则会自动加载主引导扇区的代码(512个字节),将你的代码加载至内存0x7c00处,并开始执行,而我们的操作系统也将会通过这部分的代码加载整个系统。 # 2 MBR格式 MBR位于整个磁盘的第一扇区,因为现在磁盘已经基本不使用机械硬盘。所以这里不多做介绍。我们只需要了解一个扇区为512kb,而引导扇区就位于磁盘的第一个扇区,也就是最开始的512kb。其格式如下:  这里我们需要关注的结果点为: - 代码区 (440字节) - 标准MBR分区表规划 (64字节),每个分区16字节 - MBR标志位(最后2字节) 我们回头再看一下我们之前编译后的代码  我们发现字节的代码也是在最开始的440字节内,而在0x1F0行的最后也就是刚才说的MBR标志位0x55AA。因为我们的虚拟硬盘还没有建立分区,所以中间的分区表规划全是0. ## 2.1 对应代码 在我们上也章节中,最后的两行代码如下: ```asm .org 510 boot_flag: .word 0xAA55 ``` 因为我们的代码明显没有达到512字节,所以我们将我们的代码扩展至510。而且在最后再加上标志位0x 55AA。 刚好512个字节。 ## 3 MBR 分区表规划 对于分区表规划的64字符,分为4个分区。每个占16个字节。它的作用就是描述每个分区所在位置已经大小。具体格式如下:  **注意** 这里我们因为是虚拟磁盘,采用LBA模式,与CHS相关的字段,我们可以忽略。只关注一下几个区域 - 分区状态: 80 分区表示活动分区,一般指 安装了操作系统。 - 文件系统标志位:表示哪个文件系统,fat32格式对应0x0c - 分区其实相对扇区号:块号,表示我们分区的位置 - 分区总的分区数:表示我们分区的大小 ## 3.1 解析虚拟盘 我们在我们的虚拟盘中添加新的分区,查看对应的内容,是否与我们分析一致。 ### 3.1.1 初始化磁盘 首先,与我们上次步骤一样,创建一个新的虚拟盘,并初始化为MBR格式   使用winhex的打开磁盘查看我们新建的磁盘   这个时候,我们看到在代码区已经有内容了,并且标志位为0x55AA。但因为我们还没有创建分区,所以4个分区表都为0.  ### 3.1.2 创建分区 我们创建一个新的FAT32格式的分区。    这个时候,就可以在我们的电视上看到一个新的盘  我们回头在查看虚拟硬盘的内容  返现已经有了关于我们新建磁盘的内容。 ### 3.1.3 定位分区位置。 我们把这16个字节复制出来,如下: 00 02 03 00 0c 53 03 10 80 00 00 00 00 00 04 00 根据之前的解析,我们分析一下这16个字节,注意:这里的所有数据都是小端展示,所以解析是,要反着看。 - 分区状态:第1个字节,00 标志非活动分区 - 文件系统标志位:第5个字节,0c,表示fat32格式 - 分区其实相对扇区号:第9-12字节,80 00 00 00 。 转换为10进制,也就是第0x80 个扇区,转换10进制后,再乘以512,计算为字节:65536。就是我这个分区在从磁盘的65536 个字节处开始。 - 分区总的分区数:第13-16字节,00 00 04 00。 计算大小为 0x40000 扇区 ,转换为10进制:262144,乘以512,计算字节:134217728,单位转换为MB:128。 刚好是我们之前分配的大小。 我们在winhex,找到65536字节处:  参考: https://www.bilibili.com/video/BV1Ef4y1h7de/?spm_id_from=333.788&vd_source=153b91b97e6c995e4a596387b8d84465
回帖
消灭零回复
提交回复
热议榜
java 相关知识分享
8
好的程序员与不好的程序员
6
写给工程师的十条精进原则
5
spring boot以jar包运行配置的logback日志文件没生成
5
一步一步分析SpringBoot启动源码(一)
5
MockMvc测试
5
【吐槽向】是不是有个吐槽的板块比较好玩
4
logstash jdbc同步mysql多表数据到elasticsearch
3
IntelliJ IDEA 优质License Server
3
.gitignore忽略规则
3
SpringBoot启动源码分析
3
一步一步分析SpringBoot启动源码(三)
3
2
一步一步分析SpringBoot启动源码(二)
2
积分不够将无法发表新帖
2
官方产品
Meta-Boot - 基于MCN
MCN - 快速构建SpringBoot应用
微信扫码关注公众号