词条信息

admin
admin
超级管理员
词条创建者 发短消息   

相关词条

热门词条

更多>>
什么是端口?到底是做什么的呢?
端口一般指两种,一种是硬件比如路由器或者交换机的插网线的端口,一种是软件的逻辑的概念,比如http的80端口!...
7种进阶方法让你快速测试端口连通性
Ping是Windows、Linux和Unix系统下的一个检查网络连通性的命令工具,对于大部分互联网用户来说很...
电脑开机,总需要按F1,是什么原因造成的?
一.主板掉电这个说法是行业内的叫法了,一般是主板的CMOS电池没电了导致的。也是最常见的一种提示你按F1的提示...
社保降费对个人有什么影响?
下调城镇职工基本养老保险单位缴费比例是政府给企业发的一个大红包,特别是对于企业来说是一个利好,但是对个人来说有...
车辆“出险”对下年保费的影响,到底有多大?
【出险对交强险的影响】【出险对商业险的影响】车辆“出险”对下年保费的影响,到底有多大?这里有必要先提下车险第三...

精选图集

更多>>
简易百科旧版 >>所属分类 >> 硬盘   

硬盘MBR全面分析

标签: 硬盘 MBR 电脑硬件知识

顶[0] 发表评论(0) 编辑词条

 在分析MBR的结构之前,先有来看看计算机的引导顺序(SystemBootSequence)
Step1.内部电源打开,初始化,等待一小段时间用来产生稳定的电流。如果主板芯片和CPU收到了不符合规定的电流,将自动产生一个RESET信号。在主板没有收到电源的PowerGood信号之前,重复步骤1。

Step2.执行BIOS中0FFF0h处的代码。这里只有一条JMP指令,将跳转到真正的BIOS启动程序处。

Step3.BIOS开始加电自检(Power-OnSelfTest,POST),如果出现错误,启动停止。成功的话执行INT19h(SYSTEM-BOOTSTRAPLOADER)

Step4.BIOS开始寻找显卡,找到的话将执行显卡的BIOS。接着显卡初始化,将显示一段显卡信息,我们开机看到的第一屏就是它。

Step5.BIOS开始执行所有其他设备的BIOS,包括软驱,硬盘等。

Step6.BIOS显示启动信息

Step7.BIOS开始额外的检测。一般有内存检测,如果内存有问题,将显示错误消息。

Step8.BIOS探测所有的硬件,将显示如硬盘/光区信息等

Step9.BIOS给出一个已知硬件的列表

Step10.BIOS按照设置的驱动器顺序找驱动器,如果驱动器存在的话继续找启动扇区,软驱/硬盘的启动扇区都在0柱0头1扇区(cylinder0,head0,sector1)

Step11.将启动扇区读到内存0000:7c00处,接着INT19h开始执行0000:7c00处代码

Step12.如果找不到驱动器,系统显示错误信息并停止。通常是"Nobootdevice"或"NOROMBASIC-SYSTEMHALTED"

上面是冷启动的过程,热启动将从步骤8开始

磁盘的启动扇区就是主引导记录(MasterBootRecord),包括0柱0头1扇区的512个字节,它的任务是完成BIOS到操作系统的交接。

MBR的大体结构:
偏移内容
0000MBR程序代码
01BE分区表
01FE结束标志

分区表结构
BYTE
1如果是引导分区,就是80H,如果不是,就是00H
2-4是该分区的起始扇区号
5标志字节,比如05表示扩展分区
6-8该分区的终止扇区号
9-12该分区已使用的扇区数
13-16该分区总共占用的扇区数

这是从我的硬盘上提取的MBR(硬盘是Maxtor的金钻20G,netfay的电脑早过时了:P),不同型号的硬盘MBR稍有不同,不过功能都是一样的

000033C08ED0BC007CFB-5007501FFCBE1B7C3.....|.P.P....|
0010BF1B065057B9E501-F3A4CBBEBE07B104...PW...........
0020382C7C09751583C6-10E2F5CD188B148B8,|.u...........
0030EE83C61049741638-2C74F6BE10074EAC....It.8,t....N.
00403C0074FABB0700B4-0ECD10EBF2894625<.t...........F
0050968A4604B4063C0E-7411B40B3C0C7405..F...<.t...<.t.
00603AC4752B40C64625-067524BBAA5550B4:.u @.F.u$..UP.
007041CD1358721681FB-55AA7510F6C10174A..Xr...U.u....t
00800B8AE0885624C706-A106EB1E886604BF....V$.......f..
00900A00B801028BDC33-C983FF057F038B4E.......3.......N
00A025034E02CD137229-BE5907813EFE7D55.N...r).Y..>.}U
00B0AA745A83EF057FDA-85F67583BE2E07EB.tZ.......u.....
00C08A98915299034608-13560AE812005AEB...R..F..V....Z.
00D0D54F74E433C0CD13-EBB8000080081016.Ot.3...........
00E05633F65656525006-5351BE1000568BF4V3.VVRP.SQ...V..
00F05052B800428A5624-CD135A588D641072PR..B.V$..ZX.d.r
01000A4075014280C702-E2F7F85EC3EB74B7.@u.B......^..t.
0110D6C7F8B1EDCEDED0-A7A1A3B0B2D7B0B3................
0120CCD0F2CEDEB7A8BC-CCD0F8A1A300BCD3................
0130D4D8B2D9D7F7CFB5-CDB3CAB1B3F6CFD6................
0140B4EDCEF3A1A3B0B2-D7B0B3CCD0F2CEDE................
0150B7A8BCCCD0F8A1A3-00C8B1C9D9B2D9D7................
0160F7CFB5CDB3000000-0000000000000000................
01700000000000000000-0000000000000000................
01800000008BFC1E578B-F5CB000000000000......W.........
01900000000000000000-0000000000000000................
01A00000000000000000-0000000000000000................
01B000000000002C4463-B5D7B5D700008001.....,Dc........
01C001000BFE7FFD3F00-00003F047D000000......?...?.}...
01D041FE0CFEFFFF7E04-7D007D9BE5010000A.....~.}.}.....
01E00000000000000000-0000000000000000................
01F00000000000000000-00000000000055AA..............U.

由于程序代码从0000:7C00开始,下面看反编译的结果(经过修改)

7C0033C0XORAX,AX;AX=0
7C028ED0MOVSS,AX;SS=0
7C04BC007CMOVSP,7C00;SP=7C00
7C07FBSTI;中断允许
7C0850PUSHAX
7C0907POPES;ES=0
7C0A50PUSHAX
7C0B1FPOPDS;DS=0
7C0CFCCLD;字符串操作方向:从低到高
7C0DBE1B7CMOVSI,7C1B;源地址DS:SI=0000:7C1B
7C10BF1B06MOVDI,061B;目的地址ES:DI=0000:061B
7C1350PUSHAX
7C1457PUSHDI
7C15B9E501MOVCX,01E5;共1E5h个字节
7C18F3REPZ
7C19A4MOVSB;将MBR从0000:7C00移动到0000:0600
7C1ACBRETF;跳转到0000:061B处

PARTITION_SEARCH_LOOP:

061BBEBE07MOVSI,07BE;SI指向分区表的开始
061EB104MOVCL,04;循环4次,硬盘最多4个主分区
0620382CCMP[SI],CH
06227C09JLACTIVE_PARTITION_FOUND
;分区是活动分区
06247515JNZINVALID_PARTITION_TABLE
;无效的分区表
062683C610ADDSI, 10;每个分区占用16个字节,SI指向下一个分区
0629E2F5LOOPPARTITION_SEARCH_LOOP

062BCD18INT18;分区表搜索完,无活动分区,INT18h=DISKLESSBOOTHOOK

ACTIVE_PARTITON_FOUND:

062D8B14MOVDX,[SI];下面的搜索保证只存在一个活动分区,否则分区表无效
062F8BEEMOVBP,SI;找到的引导分区标志和开始地址分别存入DX,BP

ONLY_ONE_ACTIVE_PARTITON_SEARCH_LOOP:

063183C610ADDSI, 10
063449DECCX
06357416JZGOOD_PARTITION_TABLE;搜索完毕,剩下的分区中无活动分区,分区表正常
0637382CCMP[SI],CH
063974F6JZONLY_ONE_ACTIVE_PARTITON_SEARCH_LOOP;如果还有活动分区则继续向下执行

INVALID_PARTITION_TABLE:

063BBE1007MOVSI,0710;SI指向要显示的错误信息处

HANG_MACHINE_LOOP:

063E4EDECSI

DISPLAY_ERROR_MESSAGE_LOOP:

063FACLODSB
06403C00CMPAL,00
064274FAJZHANG_MACHINE_LOOP
;到字符串尾时进入死循环,停止运行
0644BB0700MOVBX,0007
0647B40EMOVAH,0E
0649CD10INT10;显示错误信息

DISPLAY_ERROR_MESSAGE_LOOP_ALIAS:

064BEBF2JMPDISPLAY_ERROR_MESSAGE_LOOP

GOOD_PARTITION_TABLE:

064D894625MOV[BP 25],AX
;tmpvar=BP 25处清零,作为临时变量
065096XCHGSI,AX;SI=0
06518A4604MOVAL,[BP 04]
;读分区类型入AL
0654B406MOVAH,06
06563C0ECMPAL,0E;类型WIN95:DOS16-bitFAT,LBA-mapped
06587411JZTYPE_WIN95_DOS_16BIT_FAT_LBA

065AB40BMOVAH,0B
065C3C0CCMPAL,0C;类型WIN95OSR232-bitFAT,LBA-mapped
065E7405JZTYPE_WIN95_OSR2_32BIT_FAT_LBA

06603AC4CMPAL,AH;类型WIN95OSR232-bitFAT
0662752BJNZTYPE_DEFAULT
066440INCAX;AX=0B0C

TYPE_WIN95_OSR2_32BIT_FAT_LBA:

0665C6462506MOVBYTEPTR[BP 25],06
;tmpvar=06
06697524JNZTYPE_DEFAULT
;这里有点问题,这个转移应该肯定不成立?

TYPE_WIN95_DOS_16BIT_FAT_LBA:

066BBBAA55MOVBX,55AA
066E50PUSHAX
066FB441MOVAH,41
0671CD13INT13;int13h扩展功能的检测,IBM/MSINT13Extensions-INSTALLATIONCHECK
067358POPAX
06747216JBINT13H_EXTENSION_UNSUPPORTED
;CF=1-不支持int13h扩展功能
067681FB55AACMPBX,AA55;BX不为AA55-不支持int13h扩展功能
067A7510JNZINT13H_EXTENSION_UNSUPPORTED
067CF6C101TESTCL,01;CL不为1-不支持int13h扩展功能
067F740BJZINT13H_EXTENSION_UNSUPPORTED
06818AE0MOVAH,AL;AH=0E
0683885624MOV[BP 24],DL
;tmpvar=DL,引导分区标志
0686C706A106EB1EMOVWORDPTR[06A1],1EEB
;改06A1处指令为PUSHDS;JMPNEW_LOCATION_1

INT13H_EXTENSION_UNSUPPORTED:

068C886604MOV[BP 04],AH
;如果支持的话置分区类型为0E(类型WIN95:DOS16-bitFAT,LBA-mapped)
;否则为06(类型DOS3.31 16-bitFATover32M)

TYPE_DEFAULT:

068FBF0A00MOVDI,000A

READ_SECTOR_LOOP:

0692B80102MOVAX,0201
06958BDCMOVBX,SP;BX设置为7C00
069733C9XORCX,CX;CX=0
069983FF05CMPDI, 05
069C7F03JGNEW_LOCATION_0

069E8B4E25MOVCX,[BP 25]

NEW_LOCATION_0:

06A1034E02ADDCX,[BP 02]
06A4CD13INT13;将活动分区的起始扇区读到0000:7C00

NEW_LOCATION_1:

06A67229JBREAD_SECTOR_ERROR
;CF=1-错误
06A8BE5907MOVSI,0759
06AB813EFE7D55AACMPWORDPTR[7DFE],AA55
;扇区结束标志是否正确?
06B1745AJZREAD_SECTOR_SUCCEEDED
;正确
06B383EF05SUBDI, 05;DI=DI-5
06B67FDAJGREAD_SECTOR_LOOP

06B885F6TESTSI,SI
06BA7583JNZDISPLAY_ERROR_MESSAGE_LOOP:
;显示错误信息:缺少操作系统

06BCBE2E07MOVSI,072E
06BFEB8AJMPDISPLAY_ERROR_MESSAGE_LOOP_ALIAS
;显示错误信息:加载操作系统时发生错误。

070DEB74JMPCONTINUE_KOAD_OS

07838BFCMOVDI,SP
;DI=7C00
07851EPUSHDS
078657PUSHDI
07878BF5MOVSI,BP
0789CBRETF;转到执行0000:7C00处的语句,即操作系统的引导程序

 

 

附件列表


按字母顺序浏览:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

→我们致力于为广大网民解决所遇到的各种电脑技术问题
 如果您认为本词条还有待完善,请 编辑词条

上一篇什么是MBR
下一篇数据恢复的方法

0
1. 本站部分内容来自互联网,如有任何版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
2. 本站内容仅供参考,如果您需要解决具体问题,建议您咨询相关领域专业人士。
3. 如果您没有找到需要的百科词条,您可以到百科问答提问或创建词条,等待高手解答。

关于本词条的提问

查看全部/我要提问>>