无忧启动论坛
标题:
请问有没有关于各种引导二进制代码的总结啊?
[打印本页]
作者:
wenliangyu
时间:
2010-10-21 07:43
标题:
请问有没有关于各种引导二进制代码的总结啊?
我在论坛上看到了Windows NT 5.x 的MBR二进制代码,想学习一下其它各种引导的MBR、PBR代码各是什么样的,有没有大侠有总结?或者有什么途径?谢谢!
一方面想进一步学习,另一方面,用BootIce看一下自己写入的代码可以判断代码本身有没有问题,不懂代码的情况下,常常搞不清是引导没写对,还是计算机或者U盘兼容性不好。
作者:
renchmin
时间:
2010-10-21 08:38
各个操作系统的MBR引导代码是不一样的吗。
作者:
wenliangyu
时间:
2010-10-21 23:05
不一样吧?至少我用BootIce写入后,看了NTLDR的和GRUB的是不一样的。一样的话又怎能叫做“将xx引导写入MBR”呢?
作者:
amd1969
时间:
2010-10-22 00:33
蛙哥是高手,你问他吧
作者:
lvyanan
时间:
2010-10-22 08:16
所谓MBR,其核心思想就是:
1、审核DPT的合法性;
2、查找活动分区表项;
3、装入活动分区DBR并审查DBR的55AA标识;
4、移交控制权给DBR代码;
5、出错时进行报错处理。
而DBR相对MBR来说,就要复杂得多,它基本上就是根据BPB表提供的参数,对磁盘实施搜索,查找系统初始启动文件,DBR代码负责装入系统初始启动文件,并将控制权移交给装入的程序,从而完成其引导过程,DBR是有鲜明的系统特征的,不同操作系统在格式化磁盘后,构造出来的DBR是截然不同的,所指向的系统初始启动文件,也是不同的,DOS 5.0系统格式的DBR,指向的是IBMBIO.COM,XP格式的DBR指向的是NTLDR,Win7和Vista格式的DBR指向BOOTMGR,因此这些格式的DBR与系统密切相关,我们不能指望XP的DBR来装入Win7的引导程序BOOTMGR,总之用于启动的DBR,一定要切合操作系统的要求,其它非启动盘的DBR则可有可无,windows系统格式化时,不管是否启动盘,一律都带有DBR代码,有些分区工具软件,对于非启动盘,在格式化时,不会生成DBR代码,仅仅构造一个BPB表结构。
在此发一个我在96年注释的MBR,这是最简单的MBR,有助于理解MBR的运作机制,希望对LZ有所帮助。
DBR引导代码比较复杂,与文件系统结构密切相关,需要有足够的文件系统知识,方能看懂其中奥秘,我有一个DOS5.0的FAT16 DBR注释,只注释了一半,十多年未关注它了,不愿继续注释下去,就不拿出来了,免得留下笑柄。
MS-DOS V3.31 主引导程序注释
:7C00 FA CLI ;关中断
:7C01 33C0 XOR AX,AX ;━━┓AX=0
:7C03 8ED0 MOV SS,AX ┃SS=0
:7C05 BC007C MOV SP,7C00 ┃SP=7C00
:7C08 8BF4 MOV SI,SP ┃SI=7C00
:7C0A 50 PUSH AX ┃
:7C0B 07 POP ES ┃ES=0
:7C0C 50 PUSH AX ┃
:7C0D 1F POP DS ;━━┛DS=0
:7C0E FB STI ;开中断
:7C0F FC CLD ;置正方向
:7C10 BF0006 MOV DI,0600 ;DI=600
:7C13 B90001 MOV CX,0100 ;CX=100
:7C16 F2 REPNZ ;━┓传递从7C00偏移开始的
:7C17 A5 MOVSW ;━┛256个字到600偏移处
:7C18 EA1D060000 JMP 0000:061D;转移到61D处继续执行CS=0
:061D BEBE07 MOV SI,07BE ;SI=7BE指向硬盘驱动链表
:0620 B304 MOV BL,04 ;BL=04设置读4个驱动表项的计数字节
:0622 803C80 CMP BYTE PTR [SI],80 ;判断是否活动分区
:0625 740E JZ 0635 ;是则转635处执行
:0627 803C00 CMP BYTE PTR [SI],00 ;判断是否空驱动表项
:062A 751C JNZ 0648 ;不是则转648处执行报错程序
:062C 83C610 ADD SI,+10 ;SI=SI+10指向下一驱动表项
:062F FECB DEC BL ;驱动链表的计数字节BL=BL-1
:0631 75EF JNZ 0622 ;BL不为零则转622处执行
:0633 CD18 INT 18 ;BL寄存器为零则转入ROM BASIC
:0635 8B14 MOV DX,[SI] ;DX=活动分区设备号和磁头号
:0637 8B4C02 MOV CX,[SI+02] ;CX=活动分区起始柱面及扇区号
:063A 8BEE MOV BP,SI ;BP=SI=7BE
:063C 83C610 ADD SI,+10 ;SI=SI+10指向下一驱动表项
:063F FECB DEC BL ;驱动链表的计数字节BL=BL-1
:0641 741A JZ 065D ;BL=0则转65D处读取磁盘引导扇
:0643 803C00 CMP BYTE PTR [SI],00 ;比较XBE处是否为零
:0646 74F4 JZ 063C ;为零转63C处执行
:0648 BE8B06 MOV SI,068B ;SI=68B指向报错字符串首字符
:064B AC LODSB ;装入SI=68B处的一个字节到AL
:064C 3C00 CMP AL,00 ;比较AL=00 ?
:064E 740B JZ 065B ;AL=00为报错字符串结束,转65B处陷入死循环
:0650 56 PUSH SI ;将SI内容68B压入堆栈保存
:0651 BB0700 MOV BX,0007 ;BX=0007设为0号显示页,黑底白字
:0654 B40E MOV AH,0E ;AH=0E设为电传打字显示方式
:0656 CD10 INT 10 ;调用BIOS 10中断显示报错字符
:0658 5E POP SI ;SI=68B
:0659 EBF0 JMP 064B ;转到64B处继续执行报错字符的显示程序
:065B EBFE JMP 065B ;陷入死循环
:065D BF0500 MOV DI,0005 ;DI=0005设读取磁盘引导扇的重试计数次数
:0660 BB007C MOV BX,7C00 ;BX=7C00设磁盘引导扇装入内存的缓冲偏移址
:0663 B80102 MOV AX,0201 ;AX=201设INT13读1个扇区功能
:0666 57 PUSH DI ;DI内容压入堆栈
:0667 CD13 INT 13 ;调用INT13读磁盘引导程序
:0669 5F POP DI ;恢复DI内容
:066A 730C JNB 0678 ;INT13调用成功转678处执行
:066C 33C0 XOR AX,AX ;INT13调用失败,AX寄存器清零
:066E CD13 INT 13 ;调用INT13重置驱动器
:0670 4F DEC DI ;DI=DI-1
:0671 75ED JNZ 0660 ;DI寄存器非零则转660处执行
:0673 BEA306 MOV SI,06A3 ;SI=6A3设报错字符串首字符指针
:0676 EBD3 JMP 064B ;转移到24B处执行报错程序
:0678 BEC206 MOV SI,06C2 ;SI=6C2预设报错字符串首字符指针
:067B BFFE7D MOV DI,7DFE ;DI=7DFE
:067E 813D55AA CMP WORD PTR [DI],AA55 ;比较所读扇区末字是否为55AA
:0682 75C7 JNZ 064B ;非55AA为不合法扇区,转到64B处执行报错程序
:0684 8BF5 MOV SI,BP ;合法则SI=BP=7BE
:0686 EA007C0000 JMP 0000:7C00;转移到07C00处执行磁盘引导程序
:068B 496E ;─┐
. . │提示各类出错
. . │信息的字符串
. . │
:06D8 656D ;─┘
:06DA 0000 ;─┐
. . │
. . │全0
. . │
:07BD 0000 ;─┘
:07BE 80 ;─┐分区活动标志
:07BF 01 │
:07C0 0100 │
:07C2 04 分│
:07C3 0F │
:07C4 4834 │
:07C6 00000034 │
:07CA 0000EFB0 │
:07CE 0000 区│
:07D0 4A01 │
:07D2 05 │
:07D3 0F │
:07D4 E8F4 │
:07D6 00003448 表│
:07DA 0008C4C0 │
:07DE 0000 │
. . │
. . │
. . │
:07FD 0000 ;─┘
:07FE 55 ;─┐引导程序
:07FF AA ;─┘合法标志
:0600 FA 33 C0 8E D0 BC 00 7C-8B F4 50 07 50 1F FB FC .3.....|..P.P...
:0610 BF 00 06 B9 00 01 F2 A5-EA 1D 06 00 00 BE BE 07 ................
:0620 B3 04 80 3C 80 74 0E 80-3C 00 75 1C 83 C6 10 FE ...<.t..<.u.....
:0630 CB 75 EF CD 18 8B 14 8B-4C 02 8B EE 83 C6 10 FE .u......L.......
:0640 CB 74 1A 80 3C 00 74 F4-BE 8B 06 AC 3C 00 74 0B .t..<.t.....<.t.
:0650 56 BB 07 00 B4 0E CD 10-5E EB F0 EB FE BF 05 00 V.......^.......
:0660 BB 00 7C B8 01 02 57 CD-13 5F 73 0C 33 C0 CD 13 ..|...W.._s.3...
:0670 4F 75 ED BE A3 06 EB D3-BE C2 06 BF FE 7D 81 3D Ou...........}.=
:0680 55 AA 75 C7 8B F5 EA 00-7C 00 00 49 6E 76 61 6C U.u.....|..Inval
:0690 69 64 20 70 61 72 74 69-74 69 6F 6E 20 74 61 62 id partition tab
:06A0 6C 65 00 45 72 72 6F 72-20 6C 6F 61 64 69 6E 67 le.Error loading
:06B0 20 6F 70 65 72 61 74 69-6E 67 20 73 79 73 74 65 operating syste
:06C0 6D 00 4D 69 73 73 69 6E-67 20 6F 70 65 72 61 74 m.Missing operat
:06D0 69 6E 67 20 73 79 73 74-65 6D 00 00 00 00 00 00 ing system......
:06E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
:06F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
:0700 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
:0710 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
:0720 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
:0730 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
:0740 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
:0750 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
:0760 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
:0770 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
:0780 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
:0790 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
:07A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
:07B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 80 01 ................
:07C0 01 00 04 0F 34 48 34 00-00 00 B0 EF 00 00 00 00 ....4H4.........
:07D0 01 4A 05 0F F4 E8 80 F0-00 00 C0 C4 0B 00 00 00 .J..............
:07E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
:07F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA ..............U.
[
本帖最后由 lvyanan 于 2010-10-22 08:59 编辑
]
作者:
2010vvonline
时间:
2010-10-22 11:22
实在佩服5楼的大元帅
作者:
lvyanan
时间:
2010-10-22 14:16
标题:
回复 #6 2010vvonline 的帖子
那个注释也是当年的心血,奠定了我研究MBR的基础。
作者:
sgw888
时间:
2010-10-22 14:18
这些东西可能需要很长时间才能掌握的
很佩服的.也很想学习
欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/)
Powered by Discuz! X3.3