第三章计算机系统引导过程分 1Word文件下载.docx
《第三章计算机系统引导过程分 1Word文件下载.docx》由会员分享,可在线阅读,更多相关《第三章计算机系统引导过程分 1Word文件下载.docx(64页珍藏版)》请在冰点文库上搜索。
第二节INT19h引导系统
在加电自测完成之后,计算机将控制权交给INT19h,由INT19h引导并加载操作系统。
在分析讨论INT19h工作过程之前,我们首先了解获得INT19h源程序的方法。
3.2.1获得INT19h源程序的方法:
由于计算机在加栽操作系统的过程中,INT19h的入口参数被多次修改(如图3-1),因而原INT19h被包裹上了一层或多层外壳。
因此原始的INT19h入口参数不能简单地从内存0000:
0064H处获得,而必须去掉它的所有外壳才能获得。
INT19h源程序的方法很多,下面以“采用DEBUG.EXE获得INT19h源程序”的方法为例,具体给大家介绍。
第一步、让计算机按缺省方式启动:
将启动盘根目录下的CONFIG.SYS和AUTOEXEC.BAT改名后重新启动即可。
之所以要按缺省方式启动,是因为按缺省方式启动时,INT19h被修改次数最少,也最容易找到原始INT19h的入口。
第二步、找到当前INT19h的入口地址:
INT19h的入口地址位于内存0000:
0064H处,用DEBUG的D命令即可显示。
第三步、获得并分析该层源程序:
采用文件重定位方法可获得源程序。
源程序分析举例如下:
0070:
00001809172301EA9308-7000000000000000...#....p.......
001000007C0323010000-0000000070000102..|.#.......p...
002000E8003500700013-80F5060007434F4E...5.p.......CON
00F070000080F5063307-434F4D3420202020p.....3.COM4
010010C81900C013979F-00F01559F800F019...........Y....
0110F2E600F01B53FF00-F04E03700000FFF8.....S...N.p....
06300000000000000000-0000FFFFFFFFFC01................
06400102C3E200F008A5-FE00F00987E900F0................
06500A73F700F00B73F7-00F00C73F700F00D.s....s....s....
066073F700F00E57EF00-F0701EF700F07273s....W...p....rs
0670F700F07373F700F0-7473F700F07645E8...ss...ts...vE.
068000F07765E800F054-03B8031F098309E7..we...T........
06900900000000000000-0000000000000000................
07FB0EPUSHCS
07FC1FPOPDS
07FD8E061A00MOVES,[001A]
0801B90500MOVCX,0005
0804BE0001MOVSI,0100
0807ACLODSB恢复10、13、15、19、1B中断向量
080898CBW
0809D1E0SHLAX,1
080BD1E0SHLAX,1
080D8BF8MOVDI,AX
080FADLODSW
0810ABSTOSW
0811ADLODSW
0812ABSTOSW
0813E2F2LOOP0807
0815803E400600CMPBYTEPTR[0640],00
081A7422JZ083E
081CBE4106MOVSI,0641
081FB90E00MOVCX,000E
0822ACLODSB
082398CBW
08248BF8MOVDI,AX
0826ADLODSW恢复02、08、09、0A、0B、0C、0D、0E、72、
08278BD8MOVBX,AX73、74、76、77中断向量
0829ADLODSW
082A83FBFFCMPBX,-01
082D740DJZ083C
082F3DFFFFCMPAX,FFFF
08327408JZ083C
083403FFADDDI,DI
083603FFADDDI,DI
083893XCHGBX,AX
0839ABSTOSW
083A93XCHGBX,AX
083BABSTOSW
083CE2E4LOOP0822
083E803E0D0000CMPBYTEPTR[000D],00
08437403JZ0848
0845E83000CALL0878
0848CD19INT19
第四步、获得并分析原INT19h源程序:
通过第三步分析可知,原INT19h入口的位置(F000:
E6F2H)。
3.2.2INT19h中断处理程序及分析:
由于原始INT19h的内容存在于计算机的BIOS中,因此INT19h的内容与BIOS的版本和生产厂家有关,不同版本和生产厂家BIOS的INT19h内容不同。
但是、不管是那个版本或生产厂家BIOS的INT19h在加栽操作系统时,所完成的任务是相同或基本相同的。
下面举例分析:
例一、MRBIOS(c)1988INT19h分析:
F000:
E6F2E9151BJMP020A
......
020AB80000MOVAX,0000
020D8ED8MOVDS,AX
020FB80000MOVAX,0000
02128EC0MOVES,AXDS,ES←0
0214FACLI(ClearInterruptenableFlag)
021526ES:
将41H中断向量置为F000:
283H
0216C70604018302MOVWORDPTR[0104],0283
021C26ES:
其中,41H中断为硬盘参数中断
021D8C0E0601MOV[0106],CS
022126ES:
将1EH中断向量置为F000:
278H
0222C70678007802MOVWORDPTR[0078],0278
022826ES:
其中,1EH中断为软盘参数中断
02298C0E7A00MOV[007A],CS
022DFBSTI
022EB90300MOVCX,0003置读次数
0231B200MOVDL,00置A驱
0233E82100CALL0257读0头0道1扇区引导记录到0:
7C00H
02367205JB023D读失败,转023D
0238EA007C0000JMP0000:
7C00执行0:
7C00H的引导记录(软盘)
023DB90300MOVCX,0003置读次数
0240B280MOVDL,80置硬盘驱号
0242E81200CALL0257读0头0道1扇区引导记录到0:
0245720EJB0255读失败,执行ROM-BASIC(INT18H)
024726ES:
引导记录模块最后一个字为AA55H
0248813EFE7D55AACMPWORDPTR[7DFE],AA55
024E7505JNZ0255不是,转INT18H
0250EA007C0000JMP0000:
7C00成功,执行引导记录(硬盘)
0255CD18INT18ROM-BASIC
●复位驱动器及读引导记录子程序
0257B400MOVAH,00复位磁盘
0259CD13INT13
025B7213JB0270复位失败,转270H
025DB402MOVAH,02复位成功,置读扇区功能号
025FB001MOVAL,01置要读的扇区数
0261BB007CMOVBX,7C00读到内存0:
7C00H(ES:
BX指标)
026451PUSHCX
0265B500MOVCH,00置磁道号(柱面号)
0267B101MOVCL,01置要读首扇区号
0269B600MOVDH,00置要读磁头号
026BCD13INT13
026D59POPCX成功,反回
026E7307JNB0277
027080FC80CMPAH,80失败,超时错?
0273E0E2LOOPNZ0257未够3次,继续
0275F9STC
0276C3RET
0277C3RET
例二、AMIBIOS(c)1993INT19h分析:
E6F2E93CA0JMP8731
873133C0XORAX,AX
87338EC0MOVES,AX
8735FACLI
8736FCCLD
8737B8C7EFMOVAX,EFC7
873ABF7800MOVDI,0078
873DABSTOSW
873EB800F0MOVAX,F000
8741ABSTOSW修改1E中断指向F000:
EFC7
8742BF007CMOVDI,7C00
8745B90001MOVCX,0100
8748F3REPZ
8749ABSTOSW0000:
7C00---0000:
7DFF填F000
874AFBSTI
874B33D2XORDX,DX
874D33C0XORAX,AX
874FCD13INT13软驱复位
8751E83677CALLFE8A判断操作系统启动顺序是C:
A:
或A:
C:
87542406ANDAL,06
87567431JZ8789启动顺序是C:
则转移
8758E86900CALL87C4读软盘引导记录
875BE8A026CALLADFE判断是否读成功
875E734CJNB87AC成功则转移
8760E8CB64CALLEC2E判断是否有硬盘
8763A808TESTAL,08
87657512JNZ8779无硬盘则转移
8767B280MOVDL,80
8769E85800CALL87C4读硬盘主引导记录
876CE30BJCXZ8779
876E7209JB8779读失败则转移
877026ES:
8771813EFE7D55AACMPWORDPTR[7DFE],AA55比较硬盘主引导记录标志
87777443JZ87BC标志存在则转移
8779CD18INT18ROM-BASIC
8789E8A264CALLEC2E判断是否有硬盘
878CA808TESTAL,08
878E7512JNZ87A2
8790B280MOVDL,80
8792E82F00CALL87C4读硬盘主引导记录
8795E30BJCXZ87A2
87977209JB87A2
879926ES:
879A813EFE7D55AACMPWORDPTR[7DFE],AA55
87A0741AJZ87BC
87A2B200MOVDL,00
87A4E81D00CALL87C4读软盘引导记录
87A7E85426CALLADFE判断是否读成功
87AA72CDJB8779
87ACBF007CMOVDI,7C00
87AF26ES:
87B08B05MOVAX,[DI]
87B2B98000MOVCX,0080
87B5FACLI
87B6FCCLD
87B7F3REPZ
87B8AESCASB
87B9FBSTI
87BAE3BDJCXZ8779判断软盘引导记录的存在性
87BCE84B64CALLEC0A
87BFEA007C0000JMP0000:
7C00控制权交给主引导记录或引导记录
87C453PUSHBX
87C5B90400MOVCX,0004
87C8BB007CMOVBX,7C00
87CB51PUSHCX
87CCB90100MOVCX,0001
87CFB80102MOVAX,0201
87D2CD13INT13
87D459POPCX
87D5730CJNB87E3
87D750PUSHAX
87D833C0XORAX,AX
87DACD13INT13
87DC58POPAX
87DDD0E4SHLAH,1
87DF7202JB87E3
87E1E2E8LOOP87CB
87E35BPOPBX
87E4C3RET
●通过读成功与否给BH赋初值
ADFEB700MOVBH,00
AE00E306JCXZAE08如果读完4次(CX=0)则转移
AE02B701MOVBH,01
AE047303JNBAE09读成功则转移
AE06B702MOVBH,02
AE08F9STC进位标志位置1(CF=1)
AE09C3RET
EC2EB08EMOVAL,8E
EC30E8AEFFCALLEBE1
EC33A8C0TESTAL,C0
EC35C3RET
EBE1E670OUT70,AL
EBE3E300JCXZEBE5
EBE5E300JCXZEBE7
EBE7E471INAL,71
EBE9C3RET
第三节硬盘主引导记录
硬盘的主引导记录与计算机硬件无关,但与所使用的操作系统种类以及该操作系统的版本有密切的关系。
DOS操作系统与XENIX操作系统下的硬盘主引导记录不一样;
DOS3.30操作系统与DOS6.20操作系统下的硬盘主引导记录也有一些区别。
即使如此,但它们所完成的功能与作用则是基本相同的。
因此,我们在学习硬盘主引导记录时,只需分析其一种即可触类旁通,达到学习的目的。
3.3.1获得主引导记录的方法:
获得主引导记录的方法很多也很简单。
下面仅以采用DOS提供的DEBUG.EXE程序获得硬盘主引导记录的方法为例,简单介绍其方法。
C:
\>
DEBUG
-a
xxxx:
0100movax,0201ah为功能号al为读扇区数
0103movbx,0200es:
bx为所读扇区在内存中的存放位置
0106movcx,0001cx为所读磁道号和扇区号
0109movdx,0080dh为所读磁头号dl为所读磁盘的盘符
010Cint13h
010Eint3h设置断点
010F
-g
注:
INT13h的具体使用方法请查阅有关书籍
3.3.2硬盘主引导记录分析(DOS6.20):
硬盘主引导记录的功能是读出硬盘自举分区的BOOT程序,并把控制权转移到分区BOOT程序。
7C00FACLI
7C0133C0XORAX,AX
7C038ED0MOVSS,AX
7C05BC007CMOVSP,7C00重置堆栈
7C088BF4MOVSI,SP
7C0A50PUSHAX
7C0B07POPESES=0
7C0C50PUSHAX
7C0D1FPOPDSDS=0
7C0EFBSTI
7C0FFCCLD
7C10BF0006MOVDI,0600
7C13B90001MOVCX,0100
7C16F2REPNZ移动引导记录从0000:
7c00到0000:
0600
7C17A5MOVSW
7C18EA1D060000JMP0000:
061D跳转到
7C1DBEBE07MOVSI,07BE
7C20B304MOVBL,04
7C22803C80CMPBYTEPTR[SI],80判断0000:
07be是否为活动分区
7C25740EJZ7C35是活动分区则转移
7C27803C00CMPBYTEPTR[SI],00
7C2A751CJNZ7C48
7C2C83C610ADDSI,+10
7C2FFECBDECBL
7C3175EFJNZ7C22
7C33CD18INT18进入ROM-BASIC
7C358B14MOVDX,[SI]
7C378B4C02MOVCX,[SI+02]
7C3A8BEEMOVBP,SI
7C3C83C610ADDSI,+10
7C3FFECBDECBL
7C41741AJZ7C5D分区表正常
7C43803C00CMPBYTEPTR[SI],00
7C4674F4JZ7C3C
7C48BE8B06MOVSI,068B
7C4BACLODSB
7C4C3C00CMPAL,00
7C4E740BJZ7C5B
7C5056PUSHSI
7C51BB0700MOVBX,0007用白色
7C54B40EMOVAH,0E于屏幕
7C56CD10INT10写提示
7C5