如何读emmc里的引导程序_硬盘主引导记录MBR程序代码分析——小白到高手的进阶...

MBR是什么:

MBR,全称为Master Boot Record,即硬盘的主引导记录。

为了便于理解,一般将MBR分为广义和狭义两种:广义的MBR包含整个扇区(引导程序、分区表及分隔标识),也就是上面所说的主引导记录;而狭义的MBR仅指引导程序而言。

硬盘的0柱面、0磁头、1扇区称为主引导扇区(也叫主引导记录MBR)。它由三个部分组成,主引导程序、硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA)。在总共512字节的主引导扇区里主引导程序(boot loader)占446个字节,第二部分是Partition table区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。第三部分是magic number,占2个字节,固定为55AA。

MBR是不属于任何一个操作系统,也不能用操作系统提供的磁盘操作命令来读取它,但可以通过命令来修改和重写,如在minix3里面,可以用命令:installboot -m /dev/c0d0 /usr/mdec/masterboot来把masterboot这个小程序写到mbr里面,masterboot通常用汇编语言来编写。我们也可以用ROM-BIOS中提供的INT13H的2号功能来读出该扇区的内容,也可用软件工具Norton8.0中的DISKEDIT.EXE来读取。

用INT13H的读磁盘扇区功能的调用参数如下:

入口参数:AH=2 (指定功能号)
AL=要读取的扇区数
DL=磁盘号(0、1-软盘;80、81-硬盘)
DH=磁头号
CL高2位+CH=柱面号
CL低6位=扇区号
CS:BX=存放读取数据的内存缓冲地址
出口参数:CS:BX=读取数据存放地址
错误信息:如果出错CF=1 AH=错误代码
用DEBUG读取位于硬盘0柱面、0磁头、1扇区的操作如下:
A>DEBUG
-A 100
XXXX:XXXX MOV AX,0201 (用功能号2读1个扇区)
XXXX:XXXX MOV BX,1000 (把读出的数据放入缓冲区的地址为CS:1000)
XXXX:XXXX MOV CX,0001 (读0柱面,1扇区)
XXXX:XXXX MOV DX,0080 (指定第一物理盘的0磁头)
XXXX:XXXX INT 13
XXXX:XXXX INT 3
XXXX:XXXX (按回车键)
-G=100 (执行以上程序段)
-D 1000 11FF (显示512字节的MBR内容)
在windows操作系统下,例如xp,2003,Vista,windows7,有微软提供的接口直接读写mbr;
FILE * fd=fopen(".PHYSICALDRIVE0","rb+");
char buffer[512];
fread(buffer,512,1,fd);
//then you can edit buffer[512] as your wish......
fseek(fd,0,SEEK_SET); //很重要
fwrite(buffer,512,1,fd); //把修改后的MBR写入到你的机器
fclose(fd); //大功告成

MBR组成 :

一个扇区的硬盘主引导记录MBR由4个部分组成。

硬盘MBR扇区
·主引导程序(偏移地址0000H--0088H),它负责从活动分区中装载,并运行系统引导程序。
·出错信息数据区,偏移地址0089H--00E1H为出错信息,00E2H--01BDH全为0字节。
·分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH--01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4。
·结束标志字,偏移地址01FE--01FF的2个字节值为结束标志55AA,称为“魔数”(magic number)。如果该标志错误系统就不能启动。
MBR的结构如下表所示
字节偏移(16进制)
字节数
描述
00~1BD
446
引导代码
1BE~1CD
16
分区表项1
1CE~1DD
16
分区表项2
1DE~1ED
16
分区表项3
1EE~1FD
16
分区表项4
1FE~1FF
2

签名值“55AA”

具体含义如下:

(1)0x00~0x1BD:446个字节,包含一段指令,用以通知计算机如何访问分区表并定位操作系统的位置

这部分的代码会因为操作系统不同而不同,利用引导代码可以实现多重系统引导。多系统引导有两种方法可以实现:一种方法是用Windows操作系统在引导分区中设置一段代码,先加载进入用户选择系统的界面,允许用户选择要进入的系统,再进入指定的系统;第二种方法是改变MBR中的引导代码,该代码直接呈现给用户一个选择系统的界面。

(2)0x1BE~0x1FD:64个字节,4个分区表项,每个表项占用16个字节,描述一个分区,最多可以描述4个分区(这就是为什么MBR分区体系只能分成4个区【我们平时看到的分区一般可以从26个字母中选取任意多个当做分区标识(多于4个),这是因为那些分区是逻辑分区,这里的4个分区指的是主分区和扩展分区的数目,而逻辑分区是在扩展分区中划分出来的,也叫做二级、三级扩展分区。】)。

分区表项并没有顺序要求,即不要求第一个分区表项在第二个分区表项前。

分区表也不要求从第一个分区表项开始

(3)0x1FE~0x1FF:2个字节,有效结束标志“55AA”。如果没有这个标志,操作系统会认为磁盘没有初始化,无法正确加载磁盘的分区。

分区表参数含义(字节)

1 活动(80)或非活动分区(00)
2 3 4 起始的磁头 01 柱面 01 扇区00值
5 分区类型符 NTFS(07)FAT32(0B)扩展(0F)
6 7 8 结束的磁头 FE 柱面 FF 扇区FF值
9 10 11 12 本分区之前已用扇区数
13 14 15 16 本分区大小
虚拟MBR
即 EBR (extent boot record)扩展引导记录
其记录表项 与MBR相同 ,用于管理扩展还能分区上的逻辑驱动器。

67358f5628eda2f269324454495b1936.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: QFL S是一种刷机工具,用于刷写手机或其他设备的固件。而lprog_emmc_firehose_ddr.mbn文件是一种特定型号设备的固件文件。根据你的问题,似乎找不到lprog_emmc_firehose_ddr.mbn文件。 这可能有几种原因。首先,你可能没有正确地下载或获取到lprog_emmc_firehose_ddr.mbn文件。你可以确认一下,确保你有一个有效且可用的文件。 另外,你也可以尝试在不同的资源库或下载站点上搜索lprog_emmc_firehose_ddr.mbn文件,看看能否找到一个可用的版本。 此外,还有一个可能的原因是设备的固件版本不兼容或过时,导致无法找到lprog_emmc_firehose_ddr.mbn文件。你可以尝试更新设备的固件,或者寻找适用于你设备的替代文件。 最后,如果你对刷机操作并不熟悉,建议在行任何修改之前先备份设备数据,以免数据丢失或设备损坏。 总结起来,如果你在刷机时遇到找不到lprog_emmc_firehose_ddr.mbn文件的问题,可以确认你是否正确获取到文件、搜索替代版本、更新固件或者寻求专业人士的帮助。 ### 回答2: 根据提供的信息,"qfl s\刷机无lprog_emmc_firehose_ddr.mbn文件"一句话的意思是在刷机时缺少了lprog_emmc_firehose_ddr.mbn文件。 lprog_emmc_firehose_ddr.mbn文件是高通的移动设备芯片用于烧写固件的重要文件之一。如果没有这个文件,刷机过程可能无法正常行。 解决这个问题的方法是从可靠来源获取lprog_emmc_firehose_ddr.mbn文件,并将其添加到刷机所需的文件夹或目录中。可以通过以下步骤获取该文件: 1. 在可信任的网站或来源上搜索lprog_emmc_firehose_ddr.mbn文件。 2. 下载并保存该文件至电脑上。 3. 将lprog_emmc_firehose_ddr.mbn文件复制到刷机工具所需的文件夹或目录中。 4. 确保刷机工具能够正确识别和使用该文件。 5. 在刷机过程中,确保选择使用了正确的路径和文件。 请注意,在获取和使用任何固件文件时,应仔细检查其来源的可靠性和准确性,避免下载和使用来自不信任或未经验证的文件,以免引发安全问题或损害设备。如果不确定如何操作,建议寻求专业人士或技术支持的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值