当前位置:文档之家› MBR引导代码分析

MBR引导代码分析

MBR引导代码分析
MBR引导代码分析

MBR引导代码分析

整理:太虚野老

用WinHex读MBR,如下:

图中3个用红色矩形框框住的是3个字符串(Invalid partition table、Error loading operating system、Missing operating system)的地址相关的,分别是0x12C、0x144、0x 163。用蓝色矩形框框住的,MBR里面的1B8偏移位置为磁盘签名,该签名由ntldr写入,W indows就是靠这个磁盘签名来确定是从哪块硬盘启动的,如果两个磁盘签名相同了,那么n tldr就会随机更改一块磁盘,但是下次就不会出现这种情况了。实际MBR的可执行代码到0 x12B处结束。MBR引导代码的作用就是加载活动分区的引导代码。用IDA Pro反汇编MBR 后如下(包括分析):

;//MBR在系统启动时由BIOS INT 19H自动加载到0000:7c00处,为512个字节.下面这段代码实现把0000:7c1b处MBR代码复制485个字节到0000:061b处,为什么不从0000:7c00

开始复制512个到0000:06cc处,因为前面1b 个字节为复制代码,所以忽略.空出的0000:7c00 开始的空间将读入活动分区的操作系统的引导扇区.

seg000:0000 33 C0 xor ax, ax ;//ax寄存器清0

seg000:0002 8E D0 mov ss, ax ;//栈寄存器ss=0

seg000:0004 BC 00 7C mov sp, 7C00h ;//栈指针—SS:SP=0000:7C00

seg000:0007 FB sti ;//允许中断

seg000:0008 50 push ax ;这条PUSH指令在0008处,前面的8个字节指令已经执行,所以push指令输入的数据覆盖前面的0000-0001空间,没有关系. seg000:0009 07 pop es ;//附加数据段寄存器es=0

seg000:000A 50 push ax;

seg000:000B 1F pop ds ;//数据段寄存器ds=0

seg000:000C FC cld ;//使方向标志寄存器DF=0,规定

其后的串操作为正向串操作

;把7C1Bh处的长1E5h的代码拷贝到61Bh处

seg000:000D BE 1B 7C mov si, 7C1Bh ;//用于movsb

seg000:0010 BF 1B 06 mov di, 61Bh ;//用于movsb ,将[DS:SI]中字节传送到[ES:DI]中

seg000:0013 50 push ax ;//保存ax,di,用于第001a处指令retf(同ret),使ax->cs,di->ip,实现指令跳转

seg000:0014 57 push di

seg000:0015 B9 E5 01 mov cx, 1E5h ;//用于rep movsb中的rep,每次cx 减1,到0不执行movsb ,200H-1BH=1E5

seg000:0018 F3 A4 rep movsb

seg000:001A CB retf ;//相当于pop ip; pop cs,即执行retf指令后跳转到061BH处执行

seg000:001B

; ---------------------------------------------------------------------------seg000:001B BD BE 07 mov bp, 7BEh ;// 600h+1BEh=7BEh,分区表起始偏移为1BEh,07BEH开始的16个字节是第一个分区表项

seg000:001E B1 04 mov cl, 4 ;//硬盘的mbr分区表最多有4个表项,用于loop

seg000:0020

seg000:0020 loc_10020: ; CODE XREF: seg000:002A↓j seg000:0020 38 6E 00 cmp [bp+0], ch ;//检查分区指示符.cx寄存器前面用movsb减为0,所以ch=0.判断第一个分区表项的第一个字节是否为活动分区,因为cmp是有符号数据比较,如果[bp+0]=80,80H为负数,则其比0小

seg000:0023 7C 09 jl short loc_1002E ;//如果是80,活动分区,则跳到002E地址.这里有点问题,如果[bp+0x0]是符号位为1的任意数的话,也是小于0,也会跳到002E地址

seg000:0025 75 13 jnz short loc_1003A;//分区指示符不为0就跳转(显示分区表无效)

seg000:0027 83 C5 10 add bp, 10h ;//指向下一个表项(每一个表项的长度为10h字节)

seg000:002A E2 F4 loop loc_10020 ;//cx不为0就循环

;四表项的状态字节都为0就执行ROM BASIC中断.只有IBM个人计算机有Basic包括在ROM中;Int 18h中断服务程序就是启动ROM-Basic,如果没有ROM BASIC,中断18H通常会显示消息 NO ROM BASIC 然后"系统暂停",并且系统中断

seg000:002C CD 18 int 18h

;//找到活动分区后,还要检查剩余分区的启动标志是否为0;不允许存在多个活动分区

seg000:002E

seg000:002E loc_1002E: ; CODE XREF: seg000:0023 j seg000:002E 8B F5 mov si, bp

seg000:0030

seg000:0030 loc_10030: ; CODE XREF: seg000:0038↓j seg000:0030 83 C6 10 add si, 10h ;//下一个分区表表项

seg000:0033 49 dec cx ;//分区表表项数量减1

seg000:0034 74 19 jz short loc_1004F ;//如果4个表项都检查完毕就跳转

seg000:0036 38 2C cmp [si], ch ;//检查分区指示符是否为0 seg000:0038 74 F6 jz short loc_10030 ;//如果分区指示符是0就跳转检查下一分区,否则分区表是无效的

seg000:003A

seg000:003A loc_1003A: ; CODE XR EF: seg000:0025 j seg000:003A A0 B5 07 mov al, ds:7B5h ;// 01B5+0600=7B5h,0x1B5偏移地址处一般为2C,0x12C偏移地址处指向字符串“Invalid partition table”

seg000:003D

seg000:003D loc_1003D: ; CODE XREF: seg000:0069↓j seg000:003D B4 07 mov ah, 7 ;//例如:AX=72C,原0x12C偏移地址处指向字符串“Invalid partition table”,012C+0600=72C,即AX指向错误信息

seg000:003F 8B F0 mov si, ax ;//si就指向字符串

seg000:0041

seg000:0041 loc_10041: ; CODE XREF: seg000:004D↓j seg000:0041 AC lodsb ;//读取一个字节到al

seg000:0042

seg000:0042 loc_10042: ; CODE XREF: seg000:0044↓j seg000:0042 3C 00 cmp al, 0 ;//字符串是否显示完成,MBR中三个错误信息字符串都以00结尾

seg000:0044 74 FC jz short loc_10042 ;// 如果字符串显示完成,则进入死循环。否则如果字符串没有结束,调用10H号中断继续显示字符

seg000:0046 BB 07 00 mov bx, 7 ;//BL前景色,这里7为白色

seg000:0049 B4 0E mov ah, 0Eh ;//显示字符(光标前移)

seg000:004B CD 10 int 10h

seg000:004D EB F2 jmp short loc_10041 ;// 读取并显示下一个字符

seg000:004F

; ---------------------------------------------------------------------------

;//如果分区表都是正确的,开始加载活动分区的引导扇区

seg000:004F

seg000:004F loc_1004F: ; CODE XREF: seg000:0034 j seg000:004F 88 4E 10 mov [bp+10h], cl ;//bp是指向可引导分区表项的指针,cl为0.将[bp+0x10]标识位的初始值清0。这个标志表示是否尝试过备份的引导扇区.[bp+10h]的字节肯定是没用的空间

seg000:0052 E8 46 00 call sub_1009B ;//加载活动分区的头512字节到7C00H处

seg000:0055 73 2A jnb short loc_10081 ;//加载成功就跳转

seg000:0057

seg000:0057 loc_10057: ; CODE XREF: seg000:008D↓j seg000:0057 FE 46 10 inc byte ptr [bp+10h];//将[bp+0x10]标识位置1,表示已经尝试过加载备份的引导扇区

seg000:005A 80 7E 04 0B cmp byte ptr [bp+4], 0Bh ;//0BH:用传统INT 13h就可以访问的FAT32分区

seg000:005E 74 0B jz short loc_1006B

seg000:0060 80 7E 04 0C cmp byte ptr [bp+4], 0Ch ;//0CH:需要用扩展INT 13h访问的FAT32分区

seg000:0064 74 05 jz short loc_1006B

seg000:0066 A0 B6 07 mov al, ds:7B6h ;// 加载引导扇区失败,显示错误信息.0x1B6+0600=7B6h ,0x1B6偏移地址处一般为44,0x144偏移地址处指向字符串“Error loading operating system”

seg000:0069 75 D2 jnz short loc_1003D ;//跳转到此地址将错误信息显示出来(显示完后,系统进入死循环)

;//如果活动分区是FAT32分区,尝试加载备份的引导扇区.FAT32的备份引导扇区号=引导扇区号+6

seg000:006B

seg000:006B loc_1006B: ; CODE XREF: seg000:005E j seg000:006B ; seg000:0064 j seg000:006B 80 46 02 06 add byte ptr [bp+2], 6 ;//分区开始的扇区+6 seg000:006F 83 46 08 06 add word ptr [bp+8], 6 ;//本分区前已用的扇区数低2个字节+6

seg000:0073 83 56 0A 00 adc word ptr [bp+0Ah], 0 ;//如果产生进位,将本分区前已用的扇区数高2个字节+1

seg000:0077 E8 21 00 call sub_1009B

seg000:007A 73 05 jnb short loc_10081

seg000:007C A0 B6 07 mov al, ds:7B6h ;//如果备份的引导扇区也损坏了,显示错误信息“Error loading operating system”

seg000:007F EB BC jmp short loc_1003D

seg000:0081

; ---------------------------------------------------------------------------

;//在把控制权交给引导扇区前,要先检查引导扇区的签名(signature),防止把控制权交给已经损坏的引导扇区

seg000:0081

seg000:0081 loc_10081: ; CODE XREF: seg000:0055 j

seg000:0081 ;seg000:007A j seg000:0081 81 3E FE 7D 55 AA cmp word ptr ds:7DFEh, 0AA55h ;//检查活动分区的头个扇区最后的2个字节是不是AA55h

seg000:0087 74 0B jz short loc_10094;//如果是以AA55结尾就跳转

seg000:0089 80 7E 10 00 cmp byte ptr [bp+10h], 0 ;//如果不是以AA55结尾,判断是否已经加载备份的引导扇区

seg000:008D 74 C8 jz short loc_10057 ;// 如果没有加载备份的引导扇区,则跳转,加载备份的引导扇区

seg000:008F A0 B7 07 mov al, ds:7B7h ;// 如果已经加载备份的引导扇区,则跳转显示错误信息. 0x1B7+0600=7B7h ,0x1B7偏移地址处一般为63,0x163偏移地址处指向字符串“Missing operating system”

seg000:0092 EB A9 jmp short loc_1003D

seg000:0094

; --------------------------------------------------------------------------- ;//转交控制权给引导扇区,让它去完成OS的引导

seg000:0094

seg000:0094 loc_10094: ;CODE XREF: seg000:0087 j seg000:0094 8B FC mov di, sp ;//di = sp = 7C00h

seg000:0096 1E push ds ;//设置cs段

seg000:0097 57 push di ;//设置ip

seg000:0098 8B F5 mov si, bp ;//把活动分区表项指针传给引导扇区

seg000:009A CB retf ;//相当于pop ip; pop cs,即执行retf指令后跳转到0000:7C00处执行(MBR的引导代码结束)

seg000:009B

seg000:009B

; =============== S U B R O U T I N E ======================================= ;//读取引导扇区的子过程

seg000:009B

seg000:009B

seg000:009B sub_1009B proc near ; CODE XREF: seg000:0052 p seg000:009B ; seg000:0077 p seg000:009B BF 05 00 mov di, 5 ;//最多尝试读取活动分区的头个扇区5次,如果5次都失败了,提示载入操作系统错误

seg000:009E 8A 56 00 mov dl, [bp+0];//驱动器dl=80H(00H~7FH:软盘;80H~0FFH:硬盘),分区的启动标志其实就是硬盘号

seg000:00A1 B4 08 mov ah, 8 ;//08H号读取驱动器参数(读取这些参数是为了决定用CHS方式还是LBA方式读取磁盘)

seg000:00A3 CD 13 int 13h

seg000:00A5 72 23 jb short loc_100CA ;//CF=1代表操作失败,跳转(直接采用CHS方式读取磁盘),如果取参数失败,认为BIOS肯定不支持扩展Int 13h ;//计算用传统Int 13h能访问的最大逻辑扇区号,计算公式为:(最大磁头号+1)*每道扇区数*(最大柱面号+1).由于现代硬盘基本上采用LBA方式寻址,因此计算出的最大逻辑扇区号

通常会很小。例如:最大磁头号=1,每道扇区数=4,最大柱面号=962

seg000:00A7 8A C1 mov al, cl;//CH=柱面数的低8位,CL的位7~6=柱面数的高2位,CL的位5~0=每道扇区数

seg000:00A9 24 3F and al, 3Fh ;//获取每道扇区数

seg000:00AB 98 cbw ;//将al扩展为双字节保存在ax

seg000:00AC 8A DE mov bl, dh ;//磁头数

seg000:00AE 8A FC mov bh, ah ;//Int 13h调用成功后,ah被清0 seg000:00B0 43 inc bx

seg000:00B1 F7 E3 mul bx;//dx:ax=ax*bx:(最大磁头号+1)*每道扇区数.由于计算后的结果小于65535,计算后的结果用ax就可以存放,因此dx=0.例如:最大磁头号=255,每道扇区数=63

seg000:00B3 8B D1 mov dx, cx ;//开始计算最大柱面号.

seg000:00B5 86 D6 xchg dl, dh ;//交换后dl中存放柱面数的低8位

seg000:00B7 B1 06 mov cl, 6

seg000:00B9 D2 EE shr dh, cl ;//将dh右移6位,得到柱面数的高2位

seg000:00BB 42 inc dx

seg000:00BC F7 E2 mul dx ;//dx:ax=ax*dx:(最大磁头号+1)*每道扇区数*(最大柱面号+1).得到用传统Int 13h能访问的最大逻辑扇区号

;//判断引导扇区是否可以用传统Int 13h来访问,如果引导扇区的逻辑扇区号 >= 刚才算出的扇区号,必须用扩展Int13h来读取,否则就用传统Int 13h来访问

seg000:00BE 39 56 0A cmp [bp+0Ah], dx ;//[bp+0Ah]本分区前已用的扇区数(高2字节): 首先比较高2字节

seg000:00C1 77 23 ja short loc_100E6;//超过了CHS访问方式所能表示的最大扇区数就采用LBA方式读取磁盘

seg000:00C3 72 05 jb short loc_100CA;//比CHS访问方式所能表示的最大扇区数小就采用CHS方式读取磁盘,否则的话[bp+0Ah]与dx相等,继续判断

seg000:00C5 39 46 08 cmp [bp+8], ax ;//[bp+8]本分区前已用的扇区数(低2字节)

seg000:00C8 73 1C jnb short loc_100E6 ;//如果>= 本分区前已用的扇区数(低2字节),就采用LBA方式读取磁盘

;//读取引导扇区的一个扇区到7c00处(CHS方式读取)

seg000:00CA

seg000:00CA loc_100CA: ;CODE XREF: sub_1009B+A j seg000:00CA ; sub_1009B+28 j ... seg000:00CA B8 01 02 mov ax, 201h ;//ah=02H读扇区,al=01H读取的扇区数

seg000:00CD BB 00 7C mov bx, 7C00h ;//ES:BX=缓冲区的地址

seg000:00D0 8B 4E 02 mov cx, [bp+2];//CL=扇区号,CH=柱面号.有点问题:这种赋值方法只有在引导扇区的柱面号小于255时才有效,当引导扇区的柱面号大于255时,将会使用[bp+1]的高2位存放柱面号的高2位,这时会出现错误.好在现代硬盘基本上已经不使用CHS方式寻址.

seg000:00D3 8B 56 00 mov dx, [bp+0];//DL=驱动器号(00H~7FH:软

盘;80H~0FFH:硬盘),DH=磁头号

seg000:00D6 CD 13 int 13h

seg000:00D8 73 51 jnb short locret_1012B ;//CF=0就跳转(CF 为0代表操作成功),读取引导扇区结束

;读取失败后重新读取

seg000:00DA 4F dec di

seg000:00DB 74 4E jz short locret_1012B ;//5次读取失败后,跳转到结束(此时CF=1)

seg000:00DD 32 E4 xor ah, ah ;//ah=0磁盘系统复位

seg000:00DF 8A 56 00 mov dl, [bp+0];//要复位的驱动器号

seg000:00E2 CD 13 int 13h

seg000:00E4 EB E4 jmp short loc_100CA ;//复位完后,再次读取seg000:00E6

; --------------------------------------------------------------------------- ;//LBA方式读取磁盘,首先要做的就是判断是否支持LBA方式访问磁盘

seg000:00E6

seg000:00E6 loc_100E6: ; CODE XREF: sub_1009B+26 j seg000:00E6 ; sub_1009B+2D j seg000:00E6 8A 56 00 mov dl, [bp+0]

seg000:00E9 60 pusha ;//依次把寄存器AX、CX、DX、BX、SP、BP、SI和DI等压栈(刚好16字节),压栈的目的是下面调用INT 13h后,会修改部分寄存器的值

seg000:00EA BB AA 55 mov bx, 55AAh

seg000:00ED B4 41 mov ah, 41h ;//扩展INT 13h功能,检测BIOS 是否已经支持扩展INT 13h

seg000:00EF CD 13 int 13h

seg000:00F1 72 36 jb short loc_10129 ;//若CF = 1,则此驱动器不支持扩展功能,跳转

seg000:00F3 81 FB 55 AA cmp bx, 0AA55h

seg000:00F7 75 30 jnz short loc_10129 ;//若CF = 0,bx=0AA55,则存在扩展功能,否则跳转

seg000:00F9 F6 C1 01 test cl, 1;//测试是否支持第一个子集.此时CX 的 0 位表示是否支持第一个子集,第一个子集提供了访问大硬盘所必须的功能,例如后面用到的扩展读( 42h ) 功能

seg000:00FC 74 2B jz short loc_10129 ;//不支持则跳转

seg000:00FE 61 popa ;//由于部分寄存器的内容已经被INT 13h修改,所以恢复各寄存器的内容后,再次压栈

;//以LBA方式访问磁盘

seg000:00FF

seg000:00FF loc_100FF: ; CODE XREF: sub_1009B+8C↓j seg000:00FF 60 pusha

seg000:0100 6A 00 push 0

seg000:0102 6A 00 push 0

seg000:0104 FF 76 0A push word ptr [bp+0Ah];//本分区前已用的扇

区数(高2字节)

seg000:0107 FF 76 08 push word ptr [bp+8];//本分区前已用的扇区数(低2字节)

seg000:010A 6A 00 push 0 ;//内存目标缓冲区段地址

seg000:010C 68 00 7C push 7C00h ;//内存目标缓冲区偏移地址

seg000:010F 6A 01 push 1 ;//所读扇区数

seg000:0111 6A 10 push 10h ;//包长度16个字节

seg000:0113 B4 42 mov ah, 42h ;//置扩展读功能号(其实就是以LBA方式读取)

;//DS:SI=16字节磁盘地址包:

第0字节:包长度(固定为10h);第1字节:保留,必须为0;

第2、3字节:所读扇区数;第4~5字节:内存目标缓冲区首址偏移;

第6~7字节:内存目标缓冲区首址段址;第8~15字节:扇区LBA号码

seg000:0115 8B F4 mov si, sp

seg000:0117 CD 13 int 13h

seg000:0119 61 popa ;//地址包刚好是8个word,所以从栈中弹出8个word

seg000:011A 61 popa ;//恢复保存的通用寄存器的值

seg000:011B 73 0E jnb short locret_1012B ;//CF=0跳转,说明读取成功

seg000:011D 4F dec di

seg000:011E 74 0B jz short locret_1012B ;// 5次读取失败后,跳转到结束(此时CF=1)

seg000:0120 32 E4 xor ah, ah ;//ah=0磁盘系统复位

seg000:0122 8A 56 00 mov dl, [bp+0];//要复位的驱动器号

seg000:0125 CD 13 int 13h

seg000:0127 EB D6 jmp short loc_100FF ;//复位完后,再次读取seg000:0129

; ---------------------------------------------------------------------------seg000:0129

seg000:0129 loc_10129: ; CODE XREF: sub_1009B+56 j seg000:0129 ; sub_1009B+5C j ... seg000:0129 61 popa

seg000:012A F9 stc ;//设置CF=1

seg000:012B

seg000:012B locret_1012B: ; CODE XREF: sub_1009B+3D j seg000:012B ; sub_1009B+40 j ... seg000:012B C3 retn

seg000:012B sub_1009B endp

seg000:012B

主引导记录与硬盘分区

MBR结构图

主引导记录与硬盘分区 对于采用MBR型分区结构的硬盘,最多只能识别4个主要分区(Primary partition)。这里就需要引出扩展分区了。扩展分区也是主要分区的一种,但它与主分区的不同在于理论上可以划分为无数个逻辑分区。 Windows系统默认情况下,一般都是只划分一个主分区给系统,剩余的部分全部划入扩展分区。这里有下面几点需要注意: 在MBR分区表中最多4个主分区或者3个主分区+1个扩展分区,也就是说扩展分区只能有一个,然后可以再细分为多个逻辑分区。 在Linux系统中,硬盘分区命名为sda1-sda4或者hda1-hda4(其中a 表示硬盘编号可能是a、b、c等等)。在MBR硬盘中,分区号1-4是主分区(或者扩展分区),逻辑分区号只能从5开始。 在MBR分区表中,一个分区最大的容量为2T,且每个分区的起始柱面必须在这个disk的前2T内。你有一个3T的硬盘,根据要求你至少要把它划分为2个分区,且最后一个分区的起始扇区要位于硬盘的前2T空间内。[3]如果硬盘太大则必须改用GPT。 MBR分区表与GPT分区表的关系 与支持最大卷为2 TB(Terabytes)并且每个磁盘最多有4个主分区(或3个主分区,1个扩展分区和无限制的逻辑驱动器)的MBR磁盘分区的样式相比,GPT磁盘分区样式支持最大卷为128 EB(Exabytes)并且每磁盘的分区数没有上限,只受到操作系统限制(由于分区表本身需要占用一定空间,最初规划硬盘分区时,留给分区表的空间决定了最多可以有多少个分区,IA-64版Windows 限制最多有128个分区,这也是EFI标准规定的分区表的最小尺寸)。与MBR 分区的磁盘不同,至关重要的平台操作数据位于分区,而不是位于非分区或隐藏扇区。另外,GPT分区磁盘有备份分区表来提高分区数据结构的完整性。 GPT分区表:GPT,全局唯一标识分区表(GUID Partition Table),与MBR最大4个分区表项的限制相比,GPT对分区数量没有限制,但Windows最大仅支持128个GPT分区,GPT可管理硬盘大小达到了18EB。只有基于UEFI平台的主板才支持GPT分区引导启动。

江民硬盘修复王使用方法

江民硬盘修复王及使用方法 江民硬盘修复王及使用方法 第一章kvfix.EXE 硬盘修复王使用方法 特别说明:原KV系列软件中的“硬盘修复王”的可执行文件名称是jmhdfix.exe 或者 jm-hdfix.exe ,目前统一修改成kvfix.exe 文件。原文件名jmhdfix.exe (jm-hdfix.exe) 不再使用。 1 硬盘修复王可修复的范围 当硬盘分区表坏,或有关数据丢失,或硬盘进不去时,我们用硬盘修复王可修复如下状态: 1.1 硬盘分区表数据(0扇区)丢失,BOOT系统引导区(63扇区)后的数据区完好,只是硬盘进不去。 能为您重建硬盘分区表,使硬盘一切正常。 1.2 硬盘分区表不正确(0扇区数据被病毒修改),BOOT系统引导区(63扇区)后的数据区完好,只是硬盘进不去。 能为您重建硬盘分区表,使硬盘一切正常。 1.3 分区表55AA标志丢失,硬盘进不去。

能为您修补55AA,使硬盘一切正常。 1.4 0扇区分区表被病毒搬在隐含扇区(硬盘前63个扇区)某一扇区上,原分区表被病毒加密,硬盘进不去。 能为您恢复硬盘分区表,使硬盘一切正常。 1.5 0扇区分区表被病毒加密,BOOT系统引导区(63扇区)后的数据区完好,只是硬盘进不去。 能为您重建硬盘分区表,使硬盘一切正常。 1.6 硬盘分区为C、D、E、...等几个区。硬盘分区表、C盘BOOT引导区、FAT表、目录表丢失,硬盘进不去。 能为您重建C盘分区表,可恢复C、D、E、...等几个区,D、E、...等几个区完好。 1.7 硬盘分区为一个C盘。硬盘分区表、DOS引导区、FAT表、目录表杂乱,硬盘进不去。能为您修复硬盘分区表。 1.8 硬盘分区为一个C盘,硬盘分区表、BOOT引导区丢失,硬盘进不去。 能为您重建硬盘分区表,修复BOOT引导区,完后,会建议您用与硬盘相同版本的系统软盘引导机器,既可自由出入硬盘。建议您: SYS C: 重传一次引导系统到C盘,硬盘即可引导。 1.9 硬盘主引导记录被病毒破坏,硬盘不能引导,软盘引导可出入硬盘。

硬盘结构,主引导记录MBR,硬盘分区表DPT,主分区、扩展分区和逻辑分区

硬盘结构,主引导记录MBR,硬盘分区表DPT,主分区、扩展分区和逻辑分区,电脑启动过程 2010-04-17 22:12 filex的文件系统看的云里雾里,还是先总结下FAT的一些基本知识吧。 硬盘结构 硬盘有很多盘片组成,每个盘片的每个面都有一个读写磁头。如果有N个盘片。就有2N个面,对应2N个磁头(Heads),从0、1、2开始编号。每个盘片的半径均为固定值R的同心圆再逻辑上形成了一个以电机主轴为轴的柱面(Cylinders),从外至里编号为0、1、2……。每个盘片上的每个磁道又被划分为几十个扇区(Sector),通常的容量是512byte,并按照一定规则编号为1、2、3……形成Cylinders×Heads×Sector个扇区。 主引导扇区 主引导扇区位于整个硬盘的0柱面0磁头1扇区{(柱面,磁头,扇区)|(0,0,1)},bios在执行自己固有的程序以后就会jump到MBR中的第一条指令。将系统的控制权交由mbr来执行。主引导扇区主要由三部分组成:主引导记录 MBR (Master Boot Record或者Main Boot Record)、硬盘分区表 DPT(Disk Partition Table)和结束标志字三大部分组成。 对于硬盘而言,一个扇区可能的字节数为128×2n (n=0,1,2,3)。大多情况下,取n=2,即一个扇区(sector)的大小为512字节。在总共512byte的主引导记录

中,MBR的引导程序占了其中的前446个字节(偏移0H~偏移1BDH),随后的64个字节(偏移1BEH~偏移1FDH)为DPT(Disk PartitionTable,硬盘分区表),最后的两个字节“55 AA”(偏移1FEH~偏移1FFH)是分区有效结束标志。 主引导记录MBR(master boot record) 主引导记录中包含了硬盘的一系列参数和一段引导程序。其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标 志的分区上的操作系统,并将控制权交给启动程序。MBR是由分区程序(如Fdisk)所产生的,它不依赖任何操作系统,而且硬盘引导程序也是可以改变的,从而能够实现多系统引导。 硬盘分区表DPT(Disk Partition Table) 硬盘分区表占据MBR扇区的64个字节(偏移01BEH--偏移01FDH),可以对四个分区的信息进行描述,其中每个分区的信息占据16个字节。具体每个字节的定义可以参见硬盘分区结构信息。 结束标志字 结束标志字55,AA(偏移1FEH- 偏移1FFH)是MBR扇区的最后两个字节,是检验主引导记录是否有效的标志。 电脑启动过程 ?系统开机或者重启。 ?BIOS 加电自检 ( Power On Self Test -- POST )。BIOS执行内存地址

用MHDD清除主引导扇区55AA

用MHDD清除主引导扇区“55AA”标志 1.为什么要清除“55AA”标志 我们都知道,主引导扇区的最后两个字节为有效标志“55AA”,如果没有该标志,系统将会认为磁盘没有被初始化。因此,“55AA”标志对于磁盘来讲是非常重要的。但在数据恢复过程中,有时我们不得不在进入系统前将该标志进行清除。通常,在下列情况下可以考虑清除“55AA”标志。 ◆??需要恢复数据的硬盘存在病毒 当需要恢复数据的磁盘中存在病毒时,清除“55AA”标志可以使整个硬盘的分区失效,病毒也就无法继续传染。某些病毒的传染性非常强,当直接将染有这种病毒的硬盘挂接在正常的计算机上,进入操作系统后即开始传染,使数据恢复用机被病毒感染并导致死机,致使数据恢复工作无法进行。这时,我们可以在DOS下使用MHDD清除染毒磁盘的“55AA”标志,然后再进行后续的恢复工作。 ◆??重要位置处于坏扇区 如果磁盘存在坏扇区,而某个分区的引导记录扇区又恰好处在坏扇区位置时,将会使恢复用机很难顺利进入操作系统。即便进入操作系统后,也会因长时间无法读取出坏扇区的数据而不能进入就绪状态,甚至导致死机,使数据恢复工作无法进行。这时,我们也可以在DOS下先行使用MHDD将故障盘的“55AA”标志清除后再进行后续的工作。 ◆??磁盘逻辑参数矛盾 磁盘的逻辑参数存在矛盾时,也有可能导致数据恢复用机无法正常进入操作系统,或进入操作系统后即死机。比如,各个分区间的大小及位置关系矛盾,或某个分区引导扇区中的BPB参数出现错误,都有可能导致系统死机。清除“55AA”标志后,磁盘的主引导扇区失效,分区表也就失去了作用。这时操作系统会将磁盘识别为一个没有被初始化的磁盘进行加载,不会再调用分区表及各个逻辑分区的参数,也就不会发生死机的现象。 2.清除“55AA”标志的方法 使用MHDD清除“55AA”标志非常简单,因为它提供了一个专门用于清除和写入“55AA” 标志的命令“switchm br”。 步骤1 进入MHDD程序并选择要操作的磁盘,然后在程序界面中输入命令swichmbr 后按Enter键,即出现图9.5所示内容。 可以看到,执行这个命令后,程序读取磁盘的0号扇区,并提示找到了AA55。我们说“55 AA”是在十六进制编辑软件中看到的字节放置顺序,这是使用little-endian格式存放的顺序,真正的十六进制则为0xAA55,所以MHDD将其表述为AA55。 然后,程序询问是否要清除这个标志,要清除则按“Y”键,否则按“N”键。 步骤2 按“Y”后程序立即执行清除操作,清除成功后即显示“Done”,表示操作成功完成。 如图9.6所示。

硬盘主引导记录(MBR)及其结构详解

硬盘主引导记录(MBR)及其结构详解 硬盘的0柱面、0磁头、1扇区称为主引导扇区,FDISK程序写到该扇区的内容称为主引导记录(MBR)。该记录占用512个字节,它用语硬盘启动时将系统控制权交给用户指定的,并在分区表中登记了的某个操作系统区。 1.MBR的读取 硬盘的引导记录(MBR)是不属于任何一个操作系统,也不能用操作系统提供的磁盘操作命令来读取它。但我们可以用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启动画面,而是出现了“Non-System disk or disk error,replace disk and press a key to reboot”(非系统盘或磁盘出错)提示信息,这即是常见的硬盘故障——无法引导系统。 (一)硬故障导致硬盘无法引导 所谓硬盘硬故障,是指因为连接、电源或硬盘本身出现硬件故障而导致的硬盘故障。当发现硬盘无法引导时,首先得从硬件下手。 在大多数硬盘引导失败的故障中,硬盘本身的连接或设置错误是最常见的故障原因。因此,在遇上引导故障后,可在启动电脑时,按下Del键进入BIOS设置,在主界面中移动光标到“Standard CMOS Features”(标准CMOS设置)选项,回车进入次级设置界面。在该界面中注意观察IDE端口上是否能看到当前系统中所安装的硬盘,“WDC WD800BB-32CCB0”就是系统中的硬盘。 如果能够看到硬盘型号,并且型号没有出现乱码,那么可以选中该硬盘并回车,进入硬盘属性设置界面,将“IDE Primary Master”(第一IDE接口)和“Access Mode”(存取模式)选项均设置为“Auto”(自动)。移动光标到“IDE HDD Auto-Detection”(自动检测IDE硬盘)选项并按下回车键,以便让主板自动检测硬盘,如果此时能显示出相应硬盘信息,例如,Capacity(容量)、Cylinder(柱头数)等,则说明硬盘的物理连接及BIOS设置正确。 如果在“Standard CMOS Features”中看不到硬盘盘符及相关信息,或者硬盘的型号字符变成了乱码,例如,本来应该是“IC35L060AVVAWA07-O”,可是现在却变成了“IC#5L0&0AVFA 7-0”,再查看硬盘的参数,也什么都没有,那么一般说来有两种原因: 注意:如果系统中安装了多块硬盘,则还需要检查硬盘的跳线设置情况,以免因为跳线设置错误而导致系统无法检测到硬盘的存在。硬盘跳线的设置方法可以通过查看说明书获得。 这种硬盘硬故障导致的硬盘无法引导,其故障大都出现在连接数据线或IDE接口上,硬盘本身故障的可能性并不大,因此一般都可通过重新插接硬盘数据线或者改换IDE口等进行替换试验,就会很快发现故障所在。另外,BIOS中的硬盘类型正确与否直接影响硬盘的正常使用。现在的机器都支持“IDE Auto Detect”(自动检测)功能,可自动检测硬盘的类型,对于普通用户而言,建议通过该功能来自动设置硬盘参数。 (二)软故障导致硬盘无法引导 硬盘软故障也就是硬盘本身并没有问题,只是由于某些设置或参数被破坏而出

主引导扇区中了病毒

硬盘主引导扇区中了病毒,如何进行处理 前不久遇到一例硬盘主引导扇区中了病毒,其问题出现情况如下: 1、开机加电自检,检测到硬盘那一步时,检测时间比平时稍长。 2、主机自检完成后,启动操作系统,出现“starting ……”,一直等都无反应。 3、用软盘或光盘启动也只能启动到“starting ……”,视具体启动盘,出现提示也不一样,但都不能正常启动操作系统。 4、在BIOS设置中,将此盘设为“NONE”,才能用(DOS、9 5、98)启动软盘或启动光盘启动操作系统。但桌面上“我的电脑”中没有此盘;如挂上双硬盘,将故障硬盘设为“NONE”,用NT 启动,启动后亦看不到此盘(因为正常情况下,即使BIOS设置中某硬盘设为“NONE”,NT启动后,“我的电脑”中也能正常显示该硬盘);如用LINUX安装光盘启动安装,则能找到该硬盘,但提示此硬盘出错,不能进行分区。 5、低极格式化此盘,一般时间至少都需要10个小时左右才能格式完,但有的低格显示一切正常,如果重新启动,在BIOS设置中设有此盘,用软盘或光盘启动,也不能正常启动,只能到“starting……”处。(如果你的硬盘故障与前四项相同,请勿执行BIOS设置中的低级格式化,直接用以下的解决方法,这样硬盘上的数据都不会丢失) 从此现象看,应该是硬盘主引导扇区中了病毒,即使用杀病毒软件的功能,如KV300,他的软件中有一功能,能将硬盘的主引导扇区备份写回硬盘。但要想启动机子,BIOS中只能将此盘设为“NONE”,而DOS、95、98启动后,因为没有此硬盘,杀毒软件也找不到此盘,所以想到此款病毒于杀病毒软件来说,也只能说再见了。 解决方法是: 1、用一台能正常启动的机子制作启动软盘一张,并将c:\windows\command\debug.exe文件拷贝到启动软盘。 2、准备一张空白的已格式化的软盘。 3、用能正常启动的机子启动,主板自检完后,启动操作系统之前,按F8键进入DOS模式,将软盘放入软驱。执行以下步骤:(此操作是将好硬盘的主引导区内容备份到软盘,这台机子的硬盘最好与中了病毒的硬盘型号一样,即使不同,也可以。) cd c:\windows\command (红色表示自己输入的内容) debug -A 100 11BA:0103 mov bx,1000 11BA:0106 mov cx,1 11BA:0109 mov dx,80 11BA:010C int 13 11BA:010E int 3 11BA:010F ;直接回车

0磁道损坏修复的两种方法

0磁道损坏修复的两种方法 “0”磁道处于硬盘上一个非常重要的位置,硬盘的主引导记录区(MBR)就在这个位置上。MBR位于硬盘的0磁道0柱面1扇区,其中存放着硬盘主引导程序和硬盘分区表。在总共512字节的硬盘主引导记录扇区中,446字节属于硬盘主引导程序,64字节属于硬盘分区表(DPT),两个字节(55 AA)属于分区结束标志。由此可见,“0”磁道一旦受损,将使硬盘的主引导程序和分区表信息遭到严重破坏,从而导致硬盘无法自举。 “0”磁道处于硬盘上一个非常重要的位置,硬盘的主引导记录区(MBR)就在这个位置上。MBR位于硬盘的0磁道0柱面1扇区,其中存放着硬盘主引导程序和硬盘分区表。在总共512字节的硬盘主引导记录扇区中,446字节属于硬盘主引导程序,64字节属于硬盘分区表(DPT),两个字节(55 AA)属于分区结束标志。由此可见,“0”磁道一旦受损,将使硬盘的主引导程序和分区表信息遭到严重破坏,从而导致硬盘无法自举。“0”磁道损坏也属于硬盘坏道,只不过由于它的位置太重要,因而一旦遭到破坏,就会产生严重的后果。 1.硬盘“0”磁道损坏后的症状 当硬盘“0”磁道损坏后:系统自检能通过,但启动时,分区丢失或者C盘目录丢失,硬盘出现有规律的“咯吱……咯吱”的寻道声,运行SCANDISK扫描C盘,在第一簇出现一个红色的“B”;Fdisk 等分区软件

找不到硬盘、利用低版本的DM进行分区时,程序“死”在0磁道上;在进行“Format C:”时,屏幕提示0磁道损坏或无休止地执行读命令“Track 0 Bad”。 2.解决硬盘“0”磁道损坏的思路 磁头总是把“0”磁道作为寻道的基准点,如果“0”磁道出现物理损坏,磁头定位机构会因找不到“0”磁道,使硬盘自举失败。因此,在解决硬盘“0”磁道损坏问题时,一般都采取“以1代0”的方法,也就是在划分硬盘分区时,重新定义“0”磁道,将原来的“1”磁道定义为逻辑上的“0”磁道,避开已损坏的“0”磁道。 3.通过工具软件解决硬盘“0”磁道损坏 (1)通过DM万用版解决 首先从网上下载DM万用版并制作好DM启动软盘,然后执行DM 并进入其主界面。在主界面中按下Alt+M组合键进入DM的高级模式,将光标定位到“(E)dit/View partitions”(编辑/查看分区)选项,按回车键之后,程序要求选择需要修复的硬盘,选中硬盘,按回车便进入了该硬盘的分区查看界面。如图1所示。 在分区列表框中选中“1”号分区,此时上面的分区信息栏将显示该分区信息,例如分区格式、容量、开始的柱面、结束的柱面等。此时需要记住开始柱面中的“0”和结束柱面序号“2489”。保持光标定位在1号分区上,然后按下Del键删除该分区,在出现的确认删除分区的界面中选择“Yes”并回车,此时1号分区便删除了。

几个最实用的硬盘修复解决方法

几个最实用的硬盘修复解决方法 硬盘修复(1) 在研究硬盘故障的具体处理方法之前,我们有必要先了解一些硬盘相关的基础知识。 主引导记录区MBR 硬盘是一种磁介质的外部存储设备,在其盘片的每一面上,以转动轴为轴心、以一定的磁密度为间隔的若干同心圆就被划分成磁道(Track),每个磁道又被划分为若干个扇区(Sector),数据就按扇区存放在硬盘上。硬盘的第一个扇区(0道0头1扇区)被保留为主引导扇区。主引导扇区内主要有两项内容:主引导记录(对操作系统进行引导)和硬盘分区表。计算机启动时将读取该扇区的数据,并对其合法性进行判断(扇区最后两个字节是否为55AA或AA55),如合法则跳转执行该扇区的第一条指令。所以硬盘的主引导区常常成为病毒攻击的对象,从而被篡改甚至被破坏。硬盘控制器 硬盘控制器是硬盘及其他具有相同接口规范的外部设备(如CD-ROM驱动器)的管理者,由它来完成驱动器与内存之间的命令及数据传输。硬盘控制器发生故障或连接不正确将会导致硬盘无法正常工作。 CMOS中的硬盘信息 在计算机的CMOS中也存储了硬盘的信息,主要有硬盘类型、容量、柱面数、磁头数、每道扇区数、寻址方式等内容,对硬盘参数加以说明,以便计算机正确访问硬盘。 当CMOS因故掉电或发生错误时(启动时一般会提示“CMOS Checksum Error”或类似信息),硬盘设置可能会丢失或错误,硬盘访问也就无法正确进行。这种情况我们就必须重新设置硬盘参数,如果事先已记下硬盘参数或者有某些防病毒软件事先备份的CMOS信息,只需手工恢复即可;否则也可使用BIOS设置(Setup)中的“自动检测硬盘型”(HD Type Auto Detection)的功能,一般也能得到正确的结果。 不是问题的问题 很多时候我们的电脑会出现一些看似不得了的毛病,其实只是自己吓自己,也就是拨拨线头、动动跳线的举手之劳。常见的让你空出一身冷汗的硬盘不自举问题主要有以下两种: 系统不承认硬盘: 此类故障最为常见,开机自检完成时提示以下出错信息: HDD controller failure Press F1 to Resume 上述E文意指“硬盘无法启动”,甚至有时用CMOS中的自动监测功能也无法发现硬盘的存在。当出现上述信息时,应该重点先检查与硬盘有关的电源线、数据线的接口有无损坏、松动、接触不良、反接等现象,此外常见的原因就是硬盘上的主从跳线是否设置错误。 检查、排除方法: 重新插拔硬盘电源线、数据线或者将数据线改插其他IDE口进行替换试验。

重建硬盘主引导区

重建硬盘主引导区,尝试用光盘引导后进入DOS系统,盘符后使用命令:fdisk /mbr 修复引导扇区 1、重建MBR是重建分区表,fdisk/mbr是恢复引导代码,即MBR扇区的前446个字节 2、使用DiskGenius步骤(1)下载个WINPE工具,记录成启动光盘,用它来启动计算机(2)进入dos系统。运行“DiskGenius”软件,据说这是中国人编的一款软件,非常好用。在WINPE环境下运行DiskGenius。(3)选择“硬盘-重建主引导记录MBR”,重启即可。不会重写只是恢复默认对系统和其他没有影响用fdisk /mbr 中间有空格在DOS下 正好本人的pe盘里面有DiskGenius这个软件。于是在pe里面打开DiskGenius 用硬盘-重建主引导记录MBR。最终解决了问题。 试用了两次成功,第一次失败。第一次是这样的。我用DiskGenius先把c盘格式化后,然后选择重建主引导记录MBR,然后重启。电脑启动死机。第二次,用DiskGenius选择重建主引导记录MBR,然后格式化C盘。后用Ghost手动还原系统。后重启电脑出现熟悉的安装界面。实验成功。 新更换硬盘使用ghost进行硬盘对拷,将新硬盘装于电脑上会提示missing mbr helper,带用户使用xp安装版光盘引导,出现选择列表,有安装系统,修复等,选择修复进入控制恢复台,选择操作系统,输入管理员密码后输入fixmbr命令会提示是不是重新写入mbr 确定后提示成功,exit退出,重启电脑发现可以正常启动了 MBR可以重写的,很简单,使用PM分区工具,很小的,里面有重写MBR选项,关键是你能不能进系统了 典型的NTLDR丢失,按照下面步骤进行修复:

怎样修复引导扇区

怎样修复引导扇区 由于处理物理坏道的方法比较复杂,这里我们分两种情况进行不同方法的处理: 1、坏道不在“0”扇区 所谓“0”扇区指的是硬盘的物理第一扇区,这个扇区又被称为主引导扇区,因为硬盘的主引导文件就写在此扇区,若坏道出现在此扇区不仅系统无法引导,而且用通常方法也无法安装系统。当硬盘上出现了一个坏道后,如果继续对有坏道的分区进行读写,很容易使与坏道相邻的磁盘介质遭到物理损坏,结果会出现更多的坏道。因此总的处理原则就是:将物理坏道与正常磁道隔离。原理是用工具软件把坏道所在区域空出,对此区域不进行磁盘使用空间的分配。由于磁盘空间不被分配,用户也无法再次访问该区域,从而防止坏道的蔓延。我们可以通过以下几种方法实现对硬盘坏道的隔离: A、借助工具软件。修复这类硬盘故障的软件多如牛毛,PartitionMagic工具虽然非常强劲,便需要一些对很强的计算机功底的人才能够完成,因此不适合初学者使用,这里我们重点来介绍一下FBDISK,这是一个DOS下专门发现坏道并隔离后重新分区的软件,只有一个文件,仅仅几十K。操作很简单,先制作一张能启动到DOS的软盘,把FBDISK放在软盘上,用它引导系统,注意系统上只能挂一个要修理的硬盘,并且将其接在主硬盘的线上。进入DOS后,只要能发现硬盘,就运行FBDISK好了,这个小程序先会对硬盘按磁道进行扫描,发现坏道就显示出来,同时还会估计总体扫描完要用多长时间,全部扫描完后,程序会根据扫描结果和坏道情况给你提出一个全新的分区方案来,如果你接受就按Y,否则不会对你的硬盘进行处理。这个软件不错,但是可能比较大手,笔者曾有一次用它把一个10G硬盘扫完后,报告说只有300M可以使用,但是我用方法二后,却找出了近2G的完好空间。所以大家还是按需使用。 B、用FDISK和格式化命令FORMAT。具体的方法是这样的,第一要搞清硬盘的容量,对于有问题的磁盘先用FDISK分成一个C盘,再用FORMAT进行格式化,当碰到无法修复的坏块时面对FORMAT 总是试图修复,这时记录下进行的百分比。然后按CTRL+BREAK强行终止任务,用磁盘总容量×百分比,得出这部分正常的磁盘容量,用FIDSK划出一个逻辑磁盘,再将后面的磁盘估计出坏道的大概大小,大概比例为10%左右,再划分一个逻辑盘。这个小盘不用格式化,在总工作完成后将其删除,这样就将坏块给全部跳过去了。这样可能会损失一些好道,但对大容量硬盘来说无足轻重,而硬盘使用起来更加稳定。

主引导记录(MBR)的反汇编分析

主引导记录(MBR)的反汇编分析 1.)首先启动机器到实模DOS下,加载NTFS4DOS程序使程序可以读NTFS分 区。 2.)转到引导系统启动的主分区。输入C:回车转到主分区,输入DEBUG启动到DEBUG界面 3.)开始备份MBR主引导记录, -a 100 ;指定开始汇编的位置 mov ax,0201 ;AH=功能号0=复位磁盘2=读磁盘3=写磁盘AL=读取的扇区 mov bx,7c00 ;bx=读入的内存地址 mov cx,0001 ;ch=磁道号cl=扇区号 mov dx,0080 ;dh=磁头号dl=驱动器号80h:硬盘C int 13 调用BIOS中断 int 3 异常中断 -g =100 ;运行地址100处的程序

-d 7c00 l100 ;L加载文件到内存,D转储100个字节长度n MBR.DA T ;指定写入文件的名称 -rbx ;显示BX寄存器的内容 :0 改变BX寄存器的值为零 -rcx ;显示CX寄存器的内容 :200 改变CX寄存器的值为200 -W 7c00 ;将BX和CX指定的字节数的内容写入文件 保存MBR备份到C盘根目录 4.)先用Q退出DEBUG再重新进入下 5.)加载备份文件到内存

6.)开始用自己写的编码代替从7C00开始27个字节的编码Mov ax,cs ;代码段地址送AX Mov sp,7c00 ;7C00送堆栈寄存器 Sti ;开中断 Jmp 7c0c ;跳转到7C0C -T =100 ;从地址100处单步跟踪 单步跟踪输入T回车 一直跟到跳转到7C0C处

CLD ;DF方向标志置零DF=0串操作指令中操作数地址自动递增MOV SI,7C1B ;7C1B地址送SI源变址寄存器 MOV DI,061B ;061B地址送DI目的变址寄存器 PUSH AX ;AX里保存着CS代码段的地址 PUSH DI ;将DI=061B压栈位将来弹出到IP做准备MOV CX,01E5 ;循环传送的字节数 REPZ MOVSB ;循环把7C1B地址01E5字节的数据复制到 061B地址 单步跟踪到REPZ MOVSB 后面是一个循环指令用T 1E5执行过去 继续T一下 看下现在各个寄存器里的值RETF会从堆栈里弹出SP到IP 弹出

手工修复硬盘分区表

手工修复硬盘分区表 1.准备好工具diskedit和引导盘。 2.检查CMOS配置是否正确。 检查硬盘设置,在CMOS中记下 CYLINDER,SECTOR和 HEAD参数. 此处只考虑有多个逻辑硬盘硬盘的分区情况: 如果不知道各个逻辑硬盘的具体情况,用DISKEDIT 中的Find菜单寻找字符串 00 00 00 55 AA,并判断是否为EXTEND分区的分区信息,如果找到,即可知 道Extend分区的起始位置,并可推算DOS主分区的起始和结束位置,并推算 相关的参数,由于备逻辑盘是连续的,由 EXTEND分区信息,可找到各逻辑硬 盘的分区信息,并推算出EXTEND分区的结束位置及相关参数,将推算出的相 关信息写入主分区表中,即可恢复分区表。 注意:EXTEND分区为05,DOS分区为04或06。对FAT32则为0B和0C. 用DISKEDIT中的OBJECT菜单选择PHYSICAL SECTOR,键入0,0,1,即可进入主 引导区。用VIEW菜单中的AS PARTITION TABLE项可看分区结构。一般情况下 主引导区的起始位置SIDE=1 SECTOR=1 ,EXTEND分区的起始位置SIDE =0 SECTOR=1,而ENDING LOCATION处SIDE和 SECTOR必然是最大值。可直接在该分区表中修改数据。光标移至任意处回车,可显示该数据处的分区结构, 并可通过F2和F6切换。后一个分区的STARTING LOCATION必然是前一个分区ENDING LOCATION的下一个扇区。NUMBER OF SECTORS可通过分区的ENDING LOCATION和STARTING LOCATION计算出,例如,STARTING LOCATION的SIDE=1,CYLINDER=0,SECTOR=1,ENDING LOCATION 的SIDE=7,CYLINDER=262,SECTOR=39则通过以下式子计算: 主引导区的RELATIVE SECTORS 是SECTOR的最大值。 EXTEND分区的RELATIVE SECTORS=主引导区的 RELATIVE SECTORS+主引导区 的NUMBER OF SECTORS。 EXTEND分区的NUMBER OF SECTORS=本分区的 ENDING LOCATION (换算为SECTORS)-本分区的RELATIVE SECTORS。 下面是某116M硬盘(参数为CYLINDER=760 HEAD=8 SECTOR=39)共分有: C盘(DOS引导盘)大小为40M DOS扩充盘大小为76M DOS扩充盘上的逻辑驱动器为: D: 32M E: 3M F: 4M G:6M H:7M I:7M J:17M Starting Location Ending Location Relative Number of System Boot Side Cylinder Sector Side Cylinder Sertor Sertors Sertors BIGDOS Yes 1 0 1 7 262 39 39 82017 h1 c1 s1 h2 c2 s2 r1 n1 EXTEND No 0 263 1 7 760 39 82056 155376 h3 c3 s3 h4 c4 s4 r2 n2 unused No 0 0 0 0 0 0 0 0 unused No 0 0 0 0 0 0 0 0 即:r1=s2

硬盘主引导扇区详解

硬盘主引导扇区详解 分类:计算机2010-10-28 11:04 31人阅读评论(1) 收藏举报 主引导扇区位于整个硬盘的0柱面0磁头1扇区,包括硬盘主引导记录MBR(Master Boot Record)和分区表DPT(Disk Partition Table)。主引导扇区有512个字节,MBR占446个字节(偏移0000--偏移1BDH),DPT 占64个字节(偏移1BEH--偏移1FDH),最后两个字节“55,AA”。大致的结构如下图: |------------------------------------------------|0000 | Main Boot Record | | | | 主引导记录(446字节) | | | | |01BD |------------------------------------------------|01BE | | | 分区信息1(16字节) |01CD |------------------------------------------------|01CE | | | 分区信息2(16字节) |01DD |------------------------------------------------|01DE | | | 分区信息3(16字节) |01ED |------------------------------------------------|01EE | | | 分区信息4(16字节) |01FD

|------------------------------------------------|01FE | | | 55 | AA | |------------------------------------------------|01FF 主引导记录中包含了硬盘的一系列参数和一段引导程序。引导程序主要是用来在系统硬件自检完后引导具有激活标志的分区上的操作系统。它执行到最后的是一条JMP指令跳到操作系统的引导程序去。这里往往是引导型病毒的注入点,也是各种多系统引导程序的注入点。但是由于引导程序本身完成的功能比较简单,所以我们可以完全地判断该引导程序的合法性,因而也易于修复。像命令fdisk/mbr可以修复MBR和 KV3000这类软件可以查杀任意类型的引导型病毒,就是这个原因。 分区表由4个16字节的分区信息表组成。每个信息表的结构如下: 偏移长度所表达的意义存贮字节位内容及含义 第1字节引导标志。若值为80H表示活动分区,若值为00H表示非活动分区。 第2、3、4字节本分区的起始磁头号、扇区号、柱面号。其中: 磁头号——第2字节; 扇区号——第3字节的低6位; 柱面号——为第3字节高2位+第4字节8位。 第5字节分区类型符。 00H——表示该分区未用(即没有指定); 06H——FAT16基本分区; 0BH——FAT32基本分区; 05H——扩展分区; 07H——NTFS分区; 0FH——(LBA模式)扩展分区(83H为Linux分区等)。 第6、7、8字节本分区的结束磁头号、扇区号、柱面号。其中: 磁头号——第6字节;

修复硬盘主引导记录

★修复硬盘主引导记录★ 由于病毒的破坏或操作上的失误,使硬盘主引导记录和分区表损坏,硬盘将无法启动。 ①KV3000 作为一款著名的杀毒软件,KV3000同样具有非常强大的主引导记录和分区修复的功能。我们可以先用软盘启动后,执行KV3000,按下F6键,就可查看已经不能引导的硬盘隐含扇区,即查看硬盘0面0柱1扇区主引导信息是否正常,如果在硬盘的0面0柱1扇区,没有找到关键代码,即硬盘分区表关键代码“80”“55 AA ”,那么硬盘本身将不能引导,即使软盘引导后也不能进入硬盘。这时,可按动翻页键PgDn或PgUp键,在硬盘的隐含扇区内查找,如有,会在表中出现闪动的红色“80”和“55AA”,并响一声来提示你,下行会出现一行提示,“F9 = Save To Side 0 Cylinder 0 Sector 1 !!!”。这时,按一下“F9”键,就可将刚找到的、即在表中显示出的原硬盘主引信息, 覆盖到硬盘0面0柱1扇区中,然后,机器会重新引导硬盘,恢复硬盘的起动性能。 ②FDISK 用FDISK/MBR覆盖主引导记录的代码区,但不重建主分区表。适用于主引导记录被引导区型病毒破坏或主引导记录代码丢失,但主分区表并未损坏的情况下。注意:FDISK/MBR并不适用于清除所有引导型病毒,因此要慎用。 ③FIXMBR FIXMBR是专门用于重新构造主引导扇区的小工具,使用方法也简单。直接运行FIXMBR的情况下它将检查MBR结构,如果发现系统不正常则会出现是否进行修复的提示。如果回答“YES”,它将搜索分区。当搜索到相应的分区以后,系统会提示是否修改MBR,回答“YES”则开始自动修复,如果搜索的结果不对,可使用/Z开关符,重新启动系统将恢复到原来的状态。如果想详细了解FIXMBR的使用方法,可以用/H开关来查看。 ★修复硬盘分区表★ ①KV3000 在KV3000的主菜单上,按下F10键,就可对系统的有关参数和硬盘分区表快速测试,如果硬盘分区表不正常,KV3000会先将坏分区表保存到软盘上以防不测,再自动重建硬盘分区表,使硬盘起死回生。 但如果硬盘只有一个分区,而且文件分配表(FAT表)、文件目录表(ROOT表) 严重损坏,数据已经都没有了。那么,用这个功能即使恢复了C盘分区表,也不能使C盘引导,数据也不能恢复。这时需要配合其它的硬盘修复工具来恢复数据。如果硬盘还有D、E、...等几个分区,一般情况下,KV3000能找回后面没有被破坏掉的分区,重建一个新的硬盘分区表,然后,再用DOS系统软盘引导机器后,就可进入硬盘后面几个分区,将数据备出后,再将硬盘重新分区、格式化。

硬盘主引导扇区(MBR、DPT、DBR、BPB)详解

硬盘主引导扇区(MBR、DPT、DBR、BPB)详解.txt“恋”是个很强悍的字。它的上半部取自“变态”的“变”,下半部取自“变态”的“态”。硬盘主引导扇区(MBR、DPT、DBR、BPB)详解 引用: 网上收集的资料,放到这里来学习,这方面登山人大哥是高手,有空指点一下喽 硬盘的0柱面、0磁头、1扇区称为主引导扇区(也叫主引导记录MBR),该记录占用512个字节,它用于硬盘启动时将系统控制权转给用户指定的、在分区表中登记了某个操作系统分区。MBR的内容是在硬盘分区时由分区软件(如FDISK)写入该扇区的,MBR不属于任何一个操作系统,不随操作系统的不同而不同,即使不同,MBR也不会夹带操作系统的性质,具有公共引导的特性。但安装某些多重引导功能的软件或LINUX的LILO时有可能改写它;它先于所有的操作系统被调入内存并发挥作用,然后才将控制权交给活动主分区内的操作系统(图一)。 MBR由三部分构成: 1.主引导程序代码,占446字节 2.硬盘分区表DPT,占64字节 3.主引导扇区结束标志AA55H 一、硬盘的主引导程序代码是从偏移0000H开始到偏移01BDH结束的446字节;主引导程序代码包括一小段执行代码。启动PC 机时,系统首先对硬件设备进行测试,成功后进入自举程序INT 19H;然后读系统磁盘0柱面、0磁头、1扇区的主引导扇区MBR的内容到内存指定单元0:7C00 首地址开始的区域,并执行MBR程序段。 主引导代码实现下列功能: 1.扫描分区表查找活动分区; 2.寻找活动分区的起始扇区; 3.将活动分区的引导扇区读到内存; 4.执行引导扇区的运行代码。 如果主引导代码未完成这些功能,系统显示下列错误信息: Invalid partition table Error loading operating system Missing operating system 二、硬盘分区表DPT是从偏移01BEH开始到偏移01FDH结束的64字节(图二); 硬盘分区表分为四小部分,每一小部分表示一个分区的信息,占16字节。在这里我们可以看出,硬盘的总分区数为什么不能大于4。其中可激活分区数不得大于3,扩展分区数不得大于1,当前活动分区数必须小于等于1。 分区表的每一分区的第0个字节是自举标志,其值为80H时,表示该分区是当前活动分区,可引导,其值为00H时,表示该分区不可引导。 第4字节是分区类型(图三)。 每一分区的第1至第3字节是该分区起始地址。其中第1字节为起始磁头号(面号);第2字节的低6位为起始扇区号,高2位则为起始柱面号的高2位;第3字节为起始柱面号的

硬盘数据修复的几个方法

硬盘地数据恢复 、误格式化硬盘数据地恢复 在高版本状态下,格式化操作在缺省状态下都建立了用于恢复格式化地磁盘信息,实际上是把磁盘地引导扇区,分区表及目录表地所有内容复制到了磁盘地最后几个扇区中(因为后面地扇区很少使用),而数据区中地内容根本没有改变.我们都知道在时代有一个非常不错地工具,它可以恢复由命令清除地磁盘.如果用户是在下使用命令误格式化了某个分区地话,可以使用该命令试试.不过只能恢复本地硬盘和软件驱动器,而不能恢复网络驱动器.命令除了上面地反格式化功能,它还能重新修复和建立硬盘驱动器上地损坏分区表. 资料个人收集整理,勿做商业用途 但目前已经显得有点“力不从心”了,再使用它来恢复格式化后分区地方法已经有点过时了,我们可以使用多种恢复软件来进行数据恢复,比如使用和等恢复软件均可以方便地进行数据恢复工作.另外还提供了一个命令用于纪录当前地磁盘地信息,供格式化或删除之后地恢复使用,此方法也比较有效. 资料个人收集整理,勿做商业用途 、零磁道损坏时地数据恢复 硬盘地主引导记录区()在零磁道上.位于硬盘地磁道柱面扇区,其中存放着硬盘主引导程序和硬盘分区表.在总共字节地硬盘主引导记录扇区中,字节属于硬盘主引导程序,字节属于硬盘分区表(),两个字节( )属于分区结束标志.零磁道一旦受损,将使硬盘地主引导程序和分区表信息将遭到严重破坏,从而导致硬盘无法引导.磁道损坏判断:系统自检能通过,但启动时,分区丢失或者盘目录丢失,硬盘出现有规律地“咯吱……咯吱”地寻道声,运行扫描盘,在第一簇出现一个红色地“”,或者找不到硬盘、死在磁道上,此种情况即为零磁道损坏!资料个人收集整理,勿做商业用途 零磁道损坏属于硬盘坏道之一,只不过它地位置相当重要,因而一旦遭到破坏,就会产生严重地后果.如果磁道损坏,按照目前地普通方法是无法使数据完整恢复地,通常磁道损坏地硬盘,可以通过地磁盘编辑器(或者)来使磁道偏转一个扇区,使用磁道来作为磁道来进行使用.而数据可以通过来按照簇进行恢复,但数据无法保证得到完全恢复. 资料个人收集整理,勿做商业用途 、分区表损坏时地数据修复 硬盘主引导记录()所在地扇区也是病毒重点攻击地地方,通过破坏主引导扇区中地(分区表),就可以轻易地损毁硬盘分区信息,达到对资料地破坏目地.分区表地损坏是分区数据被破坏而使记录被破坏地.所以,我们可以使用软件来进行修复. 资料个人收集整理,勿做商业用途一般情况下,硬盘分区之后,要备份一份分区表至软盘、光盘或者移动存储活动盘上.在这方面,国内著名地杀毒软件系列和瑞星都提供了完整地解决方案.但是,对于没有备份分区表地硬盘来说,虽然也提供了相应地修复方法,不过成功率相对就要低很多了.在恢复分区上,诺顿磁盘医生是绝对强劲地工具,可以自动修复分区丢失等情况,可以抢救软盘坏区中地数据,强制读出后搬移到其它空白扇区.在硬盘崩溃或异常地情况下,它可能带给用户一线希望.在出现问题后,用启动盘启动,运行,选择进行诊断.会对硬盘进行全面扫描,如果有错误地话,它会向你提示,然后只要根据软件地提示选择修复项目即可,而且这些问题它都能轻轻松松地解决. 资料个人收集整理,勿做商业用途 另外,大家非常熟悉地中文磁盘工具,在重建分区表方面具有非常实用地功能,用于修复分区表地损坏是最合适不过了.如果硬盘分区表被分区调整软件(或病毒)严重破坏,必将引起硬盘和系统瘫痪地严重后果,而可通过未被破坏地分区引导记录信息重新建立分区表.只要在菜单地工具栏中选择“重建分表”,即开始搜索并重建分区.使用过程之中,将首先搜索柱面

相关主题
文本预览
相关文档 最新文档