硬盘MBR全面分析
电脑故障提供关于硬盘MBR全面分析的解决办法
在分析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;字符串操作方