当前位置:深圳电脑维护网 >>深圳数据恢复>> 电脑硬盘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;字符串操作方向:从低到高 

  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处的语句,即操作系统的引导程序 

相关文章

罗湖笔记本硬盘数据恢复
硬盘坏道故障解决技巧
硬盘初始化数据恢复
深圳专业硬盘数据恢复维修公司
硬盘数据恢复的方法
深圳专业硬盘数据恢复公司
深圳硬盘数据恢复中心
移动硬盘数据恢复技术
热门信息
如何恢复数据chk文件
电脑硬盘数据备份的意义
word数据丢失找回的方
电脑硬盘MBR全面分析
电脑硬盘数据主要结构介绍
数据恢复功能与反删除工具
Linux操作系统数据恢
深圳ghost硬盘数据恢
数据恢复常见问题解决方法
硬盘数据恢复与分区表恢复
Fdisk/MBR修复硬
深圳电脑数据备份恢复
推荐信息
数据恢复协议书范本
分区表损坏时的数据修复
提供深圳数据恢复公司
电脑数据恢复注意哪些
电脑数据恢复注意事项
深圳罗湖数据恢复公司
数据恢复成功率多少
服务器数据丢失如何恢复数
电脑数据恢复解决方案
磁盘数据恢复注意事项
特殊情况下数据恢复原则
笔记本硬盘数据恢复全攻略
最新标签
  深圳电脑维修维护
深圳电脑上门维护
深圳罗湖电脑维护
深圳福田电脑维护
深圳网络安全维护

深圳电脑组装公司
深圳it外包公司
深圳综合布线方案
深圳主板维修
深圳显示器维修
深圳光驱维修
深圳联想电脑维修点
深圳电脑系统维护
深圳网络维护公司
深圳硬盘维修
关于我们 | 广告服务 | 合作伙伴 | 客户中心 | 诚征英才 | 联系我们 | 网站地图 | 版权说明 | 推广服务
Copyright©2008-2010 深圳电脑维护网 All Rights Reserved 粤ICP备07038050号