硬盘主引导扇区MBS结构代码已注释Word文档下载推荐.docx

上传人:b****5 文档编号:17661350 上传时间:2022-12-08 格式:DOCX 页数:16 大小:26.16KB
下载 相关 举报
硬盘主引导扇区MBS结构代码已注释Word文档下载推荐.docx_第1页
第1页 / 共16页
硬盘主引导扇区MBS结构代码已注释Word文档下载推荐.docx_第2页
第2页 / 共16页
硬盘主引导扇区MBS结构代码已注释Word文档下载推荐.docx_第3页
第3页 / 共16页
硬盘主引导扇区MBS结构代码已注释Word文档下载推荐.docx_第4页
第4页 / 共16页
硬盘主引导扇区MBS结构代码已注释Word文档下载推荐.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

硬盘主引导扇区MBS结构代码已注释Word文档下载推荐.docx

《硬盘主引导扇区MBS结构代码已注释Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《硬盘主引导扇区MBS结构代码已注释Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。

硬盘主引导扇区MBS结构代码已注释Word文档下载推荐.docx

关键词:

MBS-MasterBootSector主引导扇区

MBR-MasterBootRecord主引导记录

DPT-DiskPartitionTable硬盘分区表

BRI-BootRecordID引导记录标志

CHS-(Cylinder柱面,也就是磁道编号0-mHead头,编号0-nSector扇区编号1-t)参数。

一、硬盘结构和逻辑编号

(1)硬盘物理结构

传统硬盘由多个双面磁碟组成,每个面都有一个读写磁头,磁头编号从0开始,所谓0面就是指0磁头所对应的面;

每个面被划为若干磁道,编号从负数开始,磁道数越小,越靠近磁碟边缘,因为线速度越大,所以读写速度也越快;

用户只能使用0道以后的磁道,负磁道为硬盘所带的微处理器使用的一些代码(Fireware)和本硬盘一些重要参数存放的地方;

每个磁道又分为若干扇区(每个磁道扇区数量都一样),扇区的编号从1开始(不是从0开始哟!

),每个扇区存放536(这个数记不清楚了,呵呵)多个字节,但共用户使用的只有512个字节,剩下的作为校验(CRC)和其它用途。

这就是著名的硬盘寻址CHS(Cylinder柱面,也就是磁道编号0-mHead头,编号0-nSector扇区编号1-t)参数。

对于CHS中参数中

Cylinder柱,也就是磁道,用10个二进制数表示,所以最大为1024

Head头,用一个字节表示,最大为256个磁头

Sector扇区,用6为二进制数表示,所以最大为64-1(不能用0呀)=63

所以使用CHS表示的硬盘最大容量为

1024X256X63X512=8455716864字节=8064M容量,这就是8G容量的由来。

明显看出,外道比内道长,被划分为同样扇区数是非常浪费的。

现代磁盘基本上也只有2个左右的磁碟,4个面左右,每个磁道上的扇区数量都不相同,一般使用LBA表示方法来表示每个扇区,所谓LBA指每个扇区都有一个编号,从0开始(负编号不给用户使用),为了与CHS方式兼容,硬盘内部代码使用了一种CHS-LBA映射的方式。

(2)硬盘逻辑编号

当一台计算机挂多个IDE硬盘时,LinuxUnix对硬盘的编号最为科学。

它是这样处理的

hda—第一个IDE口主硬盘,

hdb—第一个IDE口从硬盘,

hdc—第二个IDE口主硬盘,

hdd—第二个IDE口从硬盘,

但对于BIOS,DOS和Windows,处理方式有点不一样,只要掌握下面原则就可以了

(1)上面4硬盘是连续编号,从小到大,光驱不算

(2)作为启动的硬盘编号最小,为0x80(16进制数)

如第一个IDE口,主挂硬盘,从挂光驱,第二个ide口挂2个硬盘,BIOS设置从第二个主硬盘启动,则它们的编号为:

第二个IDE主硬盘为0x80,第一个IDE主硬盘为0x81,第二个IDE从硬盘为0x82

又如第一个IDE口主空,从挂硬盘,第二个IDE口主挂光驱,从挂硬盘,BIOS设置从第一个从硬盘启动,则它们的编号为:

第一个IDE从硬盘为0x80,第二个IDE从硬盘为0x81

二、硬盘分区规范和制作多重启动程序的方法

所谓对硬盘分区,直观意义上理解,是逻辑上把硬盘分为几个块。

本来就象西瓜一样,你爱怎么切就怎么切,如在CHS参数方式下,你完全可以把0面全部扇区当成一个区。

为了能保证各个操作系统的一致,所以制定了一个硬盘分区规范,如果你不按这个规范做,硬盘肯定只能被你自己开发的操作系统使用。

这个规范规定:

(1)CHS参数中0面0道1扇区为硬盘分区信息和引导代码扇区(MasterBootSectorMBS),也就是LBA=0的扇区;

(2)分区是按空心圆柱形(蛋卷形状)划分,如图所示

由于0面0道1扇区(MBS)保存启动代码和硬盘分区信息,如果这个扇区物理损坏,这个硬盘也就无法进行分区,导致硬盘无法使用。

但是对于现代硬盘,由于它内部使用的是映射机制,完全可以把个好的扇区映射过来,修复硬盘。

很多硬盘修复软件可以做到这点,比较有名的是MHDD和PC3000

对于这个重要扇区(512个字节)的规范为:

MBR—MasterBootRecord,主引导记录,共446个字节。

规范并没有规定代码是什么,很多软件公司都有自己的MBR,如MS的MBR,Linux的Grub或Lilo,DM的等。

我们常用的DOS下的Fdiskmbr其实就是使用MS的MBR覆盖这446个字节,Fdisk程序内部本身包含这段代码,有兴趣可以把Fdisk.EXE改名为Fdisk.Txt,再用记事本打开,可以看到如下信息Invalidpartitiontable.Errorloadingoperatingsystem.Missingoperatingsystem。

MS的这段代码的功能是查找引导分区信息或者叫活动分区(在MBR后面),如果没有或为2个以上,则显示以上信息,系统引导失败;

否则再按引导分区项读对应引导扇区,判断结尾是否为55AA,是的话把CPU的控制权交给引导扇区对应的代码;

否则引导失败。

当然我们也可以编写自己的MBR,做多重启动,这个大家先反汇编MS的MBR,认真研究以后就不难了,呵呵。

对于这个MBR,MS非常霸道,如果你安装了Linux的Grub,你就别想在这个硬盘上安装Windows,这个问题在TPYBBS里面出现过多次(本人也回答过多次,对于一些人动不动就叫别人对硬盘低级格式化的做法有点反感),最快的解决方法是:

Fdiskmbr,当然如果你的硬盘东西都不要的话,可以往MBS里面写一堆垃圾,破坏后面要说的BRI,让Windows安装程序认为MBS非法,然后在安装程序里面重新分区就可以了

DPT—DiskPartitionTable硬盘分区表,这是硬盘最重要的信息,这种信息被破坏,也就不知道硬盘是怎么分区的了,不过现在有些软件通过搜索可以找回分区信息,如easyrecovery.

DPT共64个字节,分为4项,每项16个字节对应一个分区。

分区规范规定:

一个硬盘可以有多个主分区(PrimaryPartition),但最多只能有一个扩展分区(ExtendedPartition),一个扩展分区可以划分为多个逻辑分区,所以一个硬盘最多只能划为4个主分区或者3个主分区+一个扩展分区。

MS真懒,它的OS最多只让我们划一个主分区+一个扩展分区,其它OS没这个问题。

每个分区项的结构如下:

偏移内容大小

00h0x80表示活动分区,00不活动1BYTE,由于这个字节为MBR代码所识别,我们完全可以编写自己的MBR,不理会该字节内容,启动时选择所要启动的分区。

甚至设置全部的分区为活动分区都可以。

无论为怎么样填写,作为从盘,都能被操作系统所识别

01h分区开始磁头编号(面号)1BYTE

02h低6位分区开始扇区号6位二进制数

02h高2位和03h分区开始的柱面数,也叫道编号10位二进制数

04h分区类型1Byte,标识这个分区的类型,如果我们把这个直接内容修改了,会使得操作系统不能认出这个分区,间接保护了这个分区的资料,当然我们也可以往MBS写一堆垃圾来保护整个硬盘资料,当我们自己要用时,就恢复MBS

05h分区结束磁头编号1Byte

06h分区结束的柱面和扇区,结构同上2byte

08h该分区第一扇区到MBS的总扇区数量4Byte

0Ch该分区的总扇区数量4Byte

分区类型:

00h未知类型或不用

01h12bitFat

04h16bitfat

05h扩展MS_DOS分区

0BhFat32容量最大2G

0ChFat32,采用LBA模式,调用int13h扩展中断

0Fh扩展MS_DOS分区,Fat32,采用LBA模式,调用int13h扩展中断

07hNTFS

82hLinux

83hLinuxSwap

 

BRI――BootRecordID引导记录标志接在DPT后面的最后2个字节为55AA,表示这个扇区是个正常的计算机启动时,BIOS把这个扇区读入内存,发现BRI不是55AA,则会拒绝启动。

如下面一个MBS内容

0FA2020033C08ED0BC007CFB-5007501FFCBE1B7C3......P.P....

0FA20210BF1B065057B9E501-F3A4CBBEBE07B104...PW...........

0FA20220382C7C09751583C6-10E2F5CD188B148B8,.u...........

0FA20230EE83C61049741638-2C74F6BE10074EAC....It.8,t....N.

0FA202403C0074FABB0700B4-0ECD10EBF2894625.t...........F%

0FA20250968A4604B4063C0E-7411B40B3C0C7405..F....t....t.

0FA202603AC4752B40C64625-067524BBAA5550B4.u+@.F%.u$..UP.

0FA2027041CD1358721681FB-55AA7510F6C10174A..Xr...U.u....t

0FA202800B8AE0885624C706-A106EB1E886604BF....V$.......f..

0FA202900A00B801028BDC33-C983FF057F038B4E.......3.......N

0FA202A025034E02CD137229-BE4607813EFE7D55%.N...r).F...}U

0FA202B0AA745A83EF057FDA-85F67583BE2707EB.tZ.......u..'

..

0FA202C08A98915299034608-13560AE812005AEB...R..F..V....Z.

0FA202D0D54F74E433C0CD13-EBB8000080583017.Ot.3........X0.

0FA202E05633F65656525006-5351BE1000568BF4V3.VVRP.SQ...V..

0FA202F05052B800428A5624-CD135A588D641072PR..B.V$..ZX.d.r

0FA203000A4075014280C702-E2F7F85EC3EB7449.@u.B......^..tI

0FA203106E76616C69642070-6172746974696F6Envalidpartition

0FA20320207461626C650045-72726F72206C6F61table.Errorloa

0FA2033064696E67206F7065-726174696E672073dingoperatings

0FA20340797374656D004D69-7373696E67206F70ystem.Missingop

0FA2035065726174696E6720-73797374656D0000eratingsystem..

0FA203600000000000000000-0000000000000000................

0FA203700000000000000000-0000000000000000................

0FA203800000008BFC1E578B-F5CB000000000000......W.........

0FA203900000000000000000-0000000000000000................

0FA203A00000000000000000-0000000000000000................

0FA203B00000000000000000-000000000000

以上是MBR

8001................

0FA203C001000BFE7F7E3F00-000080E25D000000.....~.....]...

0FA203D0417F05FEFF0FBFE2-5D00514C62000000A.......].QLb...

0FA203E00000000000000000-0000000000000000................

0FA203F00000000000000000-000000000000

以上是DPT

55AA..............U.

最后这个是BRI了,呵呵

共2个分区,一个主分区(分区类型为0B)+一个扩展分区(分区类型为05)

第一个分区信息

800101000BFE7F7E3F00-000080E25D00

80-这是一个活动分区

01-分区起始磁头号为1,也就是0头0道除了MBS使用一个扇区以外其它没有使用,我们可以在那里保存MBS内容(备份呀),也可以放代码,因为446个字节也许不够我们用,呵呵

0100=000000100000000,分区开始扇区数为000001=1,开始磁道数为0000000000=0

0B--Fat32主分区

FE--分区结束磁头数FE=254,可以看出在CHS模式下,该硬盘有255个磁头

7F7E=0111111101111110,分区结束扇区数111111(b)=63

分区结束磁道数0101111110=382

3F00-0000-分区前面的扇区数为0000003F=63,刚好是0道所占的扇区数

80E25D00-分区的总扇区数为005DE280=6152832,6152832X512(1024X1024)=3004.3125M=3G,完全正确!

三、使用BIOS直接对硬盘操作方法

(1)BIOS中断int13

BIOS已经为我们准备了读写磁盘的代码,这就是Int13(13h号中断),但很多操作系统在启动完成后都不使用这些代码,而使用扩展的LBA访问模式(驱动程序所带的代码),以突破8G容量的限制和实现DMA访问模式。

另外在Winnt以上版本OS,由于MBS是重要的信息区,系统禁止用户对MBS进行读写操作,全部的防病毒软件也对该扇区进行了保护。

所以只有DOS和Win9X才能使用int13h访问MBS

调用int13h的入口参数为

ah=2读磁盘=3写磁盘

入口参数:

AH=功能号,02为读盘操作;

03为写磁盘;

AL=一次读取的扇区数

;

ESBX=读入内存的起始地址

CH=10位柱面号的低8位;

CL:

高两位是10位柱面号的高两位,低6位是扇区号

DH=磁头号;

DL=驱动器号,00代表第一个软驱;

对于硬盘是硬盘编号,0x80为第一个硬盘,也就是系统启动的硬盘

(2)Debug使用方法

在DOS的DEBUG程序里面,我们可以编写简单的汇编程序,如使用A命令则是输入代码,使用U命令是反汇编,具体大家可以查找相应的教材,也可以使用命令得到帮助,如

注在DEBUG里面,所有数据全部为16进制数

CWINDOWSdebug

-(注获取帮助)

assembleA[address]

compareCrangeaddress

dumpD[range]

enterEaddress

fillFrangelist

goG[=address][addresses]

hexHvalue1value2

inputIport

loadL[address][drive][firstsector][number]

moveMrangeaddress

nameN[pathname][arglist]

outputOportbyte

proceedP[=address][number]

quitQ

registerR[register]

searchSrangelist

traceT[=address][value]

unassembleU[range]

writeW[address][drive][firstsector][number]

allocateexpandedmemoryXA[#pages]

deallocateexpandedmemoryXD[handle]

mapexpandedmemorypagesXM[Lpage][Ppage][handle]

displayexpandedmemorystatusXS

-a100(注从100开始汇编代码)

0FA20100movax,201(注ah=2,读磁盘,al=1读一个扇区,如果是写一个扇区,就改为movax,301)

0FA20103movbx,200(注内容放在200处)

0FA20106movcx,1(注ch=0,cl=1,0面1扇区)

0FA20109movdx,80(注dh=0,0道,dl=80第一个硬盘,即启动硬盘)

0FA2010Cint13(注执行磁盘操作代码)

0FA2010Eint20(注:

程序结束)

0FA20110

-

-u100(注反汇编)

0FA20100B80102MOVAX,0201

0FA20103BB0002MOVBX,0200

0FA20106B90100MOVCX,0001

0FA20109BA8000MOVDX,0080

0FA2010CCD13INT13

0FA2010ECD20INT20

0FA201100283470DADDAL,[BP+DI+0D47]

0FA2011402806F0AADDAL,[BX+SI+0A6F]

0FA201182480ANDAL,80

0FA2011A47INCDI

0FA2011B0A34ORDH,[SI]

0FA2011D00910F83ADD[BX+DI+830F],DL

-g(注运行)

Programterminatednormally

-d200(显示读出来的结果,MBS)

-d

0FA202B0AA745A83EF057FDA-85F67583

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1