中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 硬盘主引导程序剖析 上一主题 | 下一主题
ko20010214
版主




积分 7294
发帖 1628
注册 2002-10-16
状态 离线
『楼 主』:  硬盘主引导程序剖析

发信人: Netguy (造梦人), 信区: DOS 标 题: 硬盘主引导程序剖析 发信站: BBS 水木清华站 (Wed Aug 27 13:32:41 1997) 如果是从硬盘起动,则 开机起动时,ROM BIOS程序把硬盘上0面0道1扇区的主引导程序加载到内存0000:7C00处,并 开始执行它.因此,下面的第一条指令CLI的绝对地址是0000:7C00H 通过修改主引导扇区,可以实现一定的加密效果,若被病毒利用... 偏移 机器码 符号指令 说明 ============================================================================== 0000 FA CLI ;屏蔽中断 0001 33C0 XOR AX,AX 0003 8ED0 MOV SS,AX ;(SS)=0000H 0005 BC007C MOV SP,7C00 ;(SP)=7C00H 0008 8BF4 MOV SI,SP ;(SI)=7C00H 000A 50 PUSH AX 000B 07 POP ES ;(ES)=0000H 000C 50 PUSH AX 000D 1F POP DS ;(DS)=0000H 000E FB STI 000F FC CLD 0010 BF0006 MOV DI,0600 0013 B90001 MOV CX,0100 ;共512字节 0016 F2 REPNZ 0017 A5 MOVSW ;主引导程序把自己从0000:7C00处搬到 ;0000:0600处,为Dos分区的引导程序腾 ;出空间 0018 EA1D060000 JMP 0000:061D ;跳到0000:061D处继续执行,实际上就是 ;执行下面的MOV指令(001D偏移处) 001D BEBE07 MOV SI,07BE ;07BE-0600=01BE,01BE是分区表的首址 0020 B304 MOV BL,04 ;分区表最多4项,即最多4个分区 0022 803C80 CMP BYTE PTR [SI],80 ;80H表示活动分区 0025 740E JZ 0035 ;找到活动分区则跳走 0027 803C00 CMP BYTE PTR [SI],00 ;00H为有效分区的标志 002A 751C JNZ 0048 ;既非80H亦非00H则分区表无效 002C 83C610 ADD SI,+10 ;下一个分区表项,每项16字节 002F FECB DEC BL ;循环计数减一 0031 75EF JNZ 0022 ;检查下一个分区表项 0033 CD18 INT 18 ;4个都不能引导则进入ROM Basic 0035 8B14 MOV DX,[SI] 0037 8B4C02 MOV CX,[SI+02] ;取活动分区的引导扇区的面,柱面,扇区 003A 8BEE MOV BP,SI ;然后继续检查后面的分区表项 003C 83C610 ADD SI,+10 003F FECB DEC BL 0041 741A JZ 005D ;4个都查完则去引导活动分区 0043 803C00 CMP BYTE PTR [SI],00 ;00H为分区有效标志 0046 74F4 JZ 003C ;此分区表项有效则继续查下一个 0048 BE8B06 MOV SI,068B ;068B-0600=018B,取"无效分区"字符串 004B AC LODSB ;从字符串中取一字符 004C 3C00 CMP AL,00 ;00H表示串尾 004E 740B JZ 005B ;串显示完了则进入死循环 0050 56 PUSH SI 0051 BB0700 MOV BX,0007 0054 B40E MOV AH,0E 0056 CD10 INT 10 ;显示一个字符 0058 5E POP SI 0059 EBF0 JMP 004B ;循环显示下一个字符 005B EBFE JMP 005B ;此处为死循环 005D BF0500 MOV DI,0005 ;读入活动分区的引导扇,最多试读5次 0060 BB007C MOV BX,7C00 0063 B80102 MOV AX,0201 0066 57 PUSH DI 0067 CD13 INT 13 ;读 0069 5F POP DI 006A 730C JNB 0078 ;读盘成功则跳走 006C 33C0 XOR AX,AX 006E CD13 INT 13 ;读失败则复位磁盘 0070 4F DEC DI 0071 75ED JNZ 0060 ;不到5次则再试读 0073 BEA306 MOV SI,06A3 ;06A3-0600=00A3,即"Error loading"串 0076 EBD3 JMP 004B ;去显示字符串,然后进入死循环 0078 BEC206 MOV SI,06C2 ;06C2-0600=00C2,即"Missing.."串 0076 EBD3 JMP 004B ;去显示字符串,然后进入死循环 0078 BEC206 MOV SI,06C2 ;06C2-0600=00C2,即"Missing.."串 007B BFFE7D MOV DI,7DFE ;7DFE-7C00=01FE,即活动分区的引导扇 ;区的最后两字节的首址 007E 813D55AA CMP WORD PTR [DI],AA55;最后两字节为AA55H则有效 0082 75C7 JNZ 004B ;无效则显示字符串并进入死循环 0084 8BF5 MOV SI,BP 0086 EA007C0000 JMP 0000:7C00 ;有效则跳去引导该分区 0080 49 6E 76 61 6C Inval 0090 69 64 20 70 61 72 74 69-74 69 6F 6E 20 74 61 62 id partition tab 00A0 6C 65 00 45 72 72 6F 72-20 6C 6F 61 64 69 6E 67 le.Error loading 00B0 20 6F 70 65 72 61 74 69-6E 67 20 73 79 73 74 65 operating syste 00C0 6D 00 4D 69 73 73 69 6E-67 20 6F 70 65 72 61 74 m.Missing operat 00D0 69 6E 67 20 73 79 73 74-65 6D 00 00 FB 4C 38 1D ing system...L8. 00E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 00F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0100 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0120 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0130 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0140 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0150 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0160 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0170 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0180 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0190 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 01A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 01B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 80 01 ................;分区表 01C0 01 00 06 0F 7F 9C 3F 00-00 00 F1 59 06 00 00 00 ......?....Y.... 01D0 41 9D 05 0F FF 38 30 5A-06 00 40 56 06 00 00 00 A....80Z..@V.... 01E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 01F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA ..............U. Dos的引导程序我还要查些资料,下次吧. -------------------------------------------------------------------------- 人生是一场梦,又何必太认真 ? 何不游戏人间,管它风风波波多少年. ------------------------------------------------------------------------- ※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.38.198.197] (本文采用S-Term文章拷贝脚本拷贝) ==================================================




ko20010214 ================================= 大功告成,打个Kiss! ko20010214@MSN.com 神州优雅Q300C Intel CeleronM 370处理器 | 256MbDDR内存 40G硬盘 | USB2.0 | IEEE 1394 13.3 ' WXGA 宽屏(16:10) | COMBO光驱 10/100M网卡 | 四合一读卡器
2003-6-1 00:00
查看资料  发送邮件  发短消息 网志  OICQ (16959102)  编辑帖子  回复  引用回复
maple
中级用户




积分 417
发帖 137
注册 2003-5-30
状态 离线
『第 2 楼』:  

THANK YOU!


2003-7-24 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: