我们知道MBR分区的硬盘,最多可以设置4个主分区,每个主分区可以装不同的操作系统,设置为活动分区之后,就可以启动相应分区下的操作系统。

本日志,记录的就是修改硬盘MBR启动代码,在启动过程中动态修改硬盘的活动分区,从而实现启动不同的操作系统。

1、默认启动已经设置为活动分区的主分区。

2、在电脑启动时,按右shift键启动第一主分区(hd0,0)。

3、在电脑启动时,按左shift键启动第二主分区(hd0,1)。

4、在电脑启动时,按ctrl键启动第三主分区(hd0,2)。

5、在电脑启动时,按alt键启动第四主分区(hd0,3)。

没有改动硬盘启动部分代码,只是改了开头的一个跳转代码到我所加的代码处执行。所加代码所占用的空间为原始MBR出错信息所在的空间。我把出错信息作了减缩,所以,出错的话,还是会有提示的。

实现过程:

1、运行硬盘分区软件,将MBR保存为文件MBR.DAT。

2、在XP DOS命令行下运行DEBUG,按照设想的功能进行汇编,再反汇编,得到机器码

3、用UltraEdit打开MBR.dat文件,将机器码逐个敲入相应地址中。将偏移地址25,26处的值从ŕC",ൎ"改为ආ",൏"(跳转到附加的代码处执行)。。

4、将修改后的MBR.dat文件写回到硬盘的第一扇区。

这是第一种修改方法:(所添加的代码为MBR出错信息所在的地址,这个MBR的出错信息比较少,空间紧凑。)

所加的代码从MBR的第354字节处开始,具体代码如下:

0000:0762 B402 MOV AH,02

0000:0764 CD16 INT 16

0000:0766 240F AND AL,0F

0000:0768 3C00 CMP AL,00

0000:076A 7438 JZ 07A4

#是否右shift键按下

0000:076C A801 TEST AL,01

0000:076E 750C JNZ 077C

#是否左shift键按下

0000:0770 A802 TEST AL,02

0000:0772 750D JNZ 0781

#是否ctrl键按下

0000:0774 A804 TEST AL,04

0000:0776 750E JNZ 0786

#是否alt键按下

0000:0778 A808 TEST AL,08

0000:077A 750F JNZ 078B

#第一主分区激活字节地址

0000:077C BBBE07 MOV BX,07BE

0000:077F EB0D JMP 078E

#第二主分区激活字节地址

0000:0781 BBCE07 MOV BX,07CE

0000:0784 EB08 JMP 078E

#第三主分区激活字节地址

0000:0786 BBDE07 MOV BX,07DE

0000:0789 EB03 JMP 078E

#第四主分区激活字节地址

0000:078B BBEE07 MOV BX,07EE

#先将各活动标志清零

0000:078E B400 MOV AH,00

0000:0790 8826BE07 MOV [07BE],AH

0000:0794 8826CE07 MOV [07CE],AH

0000:0798 8826DE07 MOV [07DE],AH