?? read.txt
字號:
硬盤上的第一個512個字節(jié)
Huang
optman@126.com
你對硬盤上的第一個512個字節(jié)了解嗎,你知道它是干什么用的嗎?你知道這個區(qū)域?qū)τ谀愕挠脖P數(shù)據(jù)的至關(guān)重要性么?你想做出獨(dú)特的開機(jī)畫面嗎?我的這個程序就試圖向您揭開這個神秘的面紗(保存、恢復(fù)分區(qū)表,實現(xiàn)多操作系統(tǒng)引導(dǎo))。(如果你要運(yùn)行我的程序,請仔細(xì)閱讀程序的說明,否則一切后果自負(fù)!)
這個512字節(jié)就是硬盤的主引導(dǎo)扇區(qū),它包括,一個簡短的引導(dǎo)程序,一個分區(qū)表。在硬盤引導(dǎo)的情況下,BIOS自檢完成后,就把這512個字節(jié)調(diào)入內(nèi)存,并把CPU的控制權(quán)交給它。該引導(dǎo)程序讀取分區(qū)表,確定一個可引導(dǎo)分區(qū),并把分區(qū)的第一個扇區(qū)(512字節(jié))讀入內(nèi)存,然后把CPU的控制權(quán)交給它,繼續(xù)完成最終的系統(tǒng)引導(dǎo)。
硬盤的這種設(shè)計,是為了使一個硬盤可以同時安裝多個操作系統(tǒng),而并不限制是何種系統(tǒng)(包括你自己設(shè)計的一個“水貨”操作系統(tǒng)). 所以你可以在使用Windows NT,Window 95的同時使用免費(fèi)的Linux(當(dāng)初我設(shè)計這個軟件的動機(jī)就是要安裝Linux)。
以前為了讓一個分區(qū)能夠引導(dǎo),我們必須使用fdisk激活該分區(qū),并重新啟動系統(tǒng),太麻煩了。我們能不能制作個啟動菜單,在引導(dǎo)的時候進(jìn)行選擇呢?因為這樣要方便多了。
硬盤的以上設(shè)計結(jié)構(gòu)就使我們制作這樣一個引導(dǎo)程序成為了可能。如果我們對標(biāo)準(zhǔn)的引導(dǎo)程序稍加修改,加上一個圖形菜單,根據(jù)用戶的選擇進(jìn)行相應(yīng)操作系統(tǒng)的引導(dǎo),豈不很好?
事實上我已經(jīng)根據(jù)以上原理制作了一個這樣的系統(tǒng),試用了兩年,效果不錯。其實類似的商業(yè)軟件已經(jīng)不少,例如流行的System commander,Linux下的lilo。不過,如果你能對我的程序稍加修改,你會發(fā)現(xiàn),做一個有自己特色的開機(jī)畫面,會是一件很愜意的事情。
美好設(shè)想:
雖然我沒有實現(xiàn)以下的設(shè)想,但我想,一定有天才能夠做到。
1.做一個漂亮的開機(jī)畫面,就象品牌機(jī)所做的。
2.做一個身份驗證程序,就像開機(jī)口令。
......
編程的難點:
1. 由于只有512個字節(jié)(還要除去分區(qū)表的64個字節(jié),實際還有448個字節(jié)),要用高級語言來實現(xiàn)恐怕是有點困難(我不排除某些天才的可能)。我自己是使用的匯編語言。但我想可以在安裝和設(shè)置程序上使用高級語言來實現(xiàn),而使用內(nèi)嵌式匯編語言實現(xiàn)那個核心的512字節(jié)。我們也可以使用幾個扇區(qū)來實現(xiàn)一些復(fù)雜的功能,但BIOS只會調(diào)入第一個扇區(qū)執(zhí)行,其余的要自己調(diào)入。
2. 由于引導(dǎo)代碼是在操作系統(tǒng)啟動之前執(zhí)行的,故不能使用任何操作系統(tǒng)的調(diào)用,只能用BIOS的軟中斷例程。
3. 調(diào)試的困難,因為引導(dǎo)代碼是在操作系統(tǒng)啟動之前執(zhí)行的,故這個環(huán)境很難模擬。我們只能把代碼分段調(diào)試(如菜單的編制就可以在DOS下調(diào)試成功),但核心的引導(dǎo)還是要實戰(zhàn)。為了安全起見,我們必須先做好備份,以免程序失敗導(dǎo)致硬盤數(shù)據(jù)丟失。
重新編譯程序的要求:
要有ASM的編譯程序,如MASM.要有鏈接程序,如link.
程序的主要特點:
安裝代碼很靈活。為了把代碼裝入主引導(dǎo)扇區(qū),有的程序采用了把代碼轉(zhuǎn)化為二進(jìn)制的方式,那個工作量可想而知......。而我的程序可以一次性寫入,沒有任何的累贅輸入。如果你仔細(xì)研究我的代碼,你會為這一段代碼拍案叫絕的,xixi.......。
一點遺憾:
我的程序是在DOS下完成的,界面很水。要進(jìn)行一些修改,就得直接修改源程序,并重新編譯、鏈接、運(yùn)行。我一直想要在Windows或DOS下,有一個漂亮的界面,能方便的進(jìn)行參數(shù)的修改。然而始終沒有一個動力讓我一定做出來,兩年了,一直這樣......
程序介紹:
1.save.exe 保存硬盤的第一個扇區(qū)到軟盤上(A:驅(qū)動器),文件名HDBOOT.DAT,大小512字節(jié)。如果文件已經(jīng)存在,就覆蓋。
2.restore.exe 從A:驅(qū)動器恢復(fù)保存的HDBOOT.DAT到硬盤的第一個扇區(qū)。
3.multigo.exe 對硬盤的第一個扇區(qū)進(jìn)行修改,使其能以菜單的方式讓用戶進(jìn)行多操作系統(tǒng)的引導(dǎo),并保留現(xiàn)有分區(qū)表。但為了安全起見,請先用save.exe進(jìn)行保存。
4.stanBoot.exe 恢復(fù)標(biāo)準(zhǔn)的引導(dǎo)方式,并保留現(xiàn)有分區(qū)表。請先確保激活的分區(qū)是可引導(dǎo)的!!(運(yùn)行時,提示有一點出入,說是password check,那是另一個版本的提示,沒有關(guān)系的,我懶得修改了,請見諒)
使用說明:
雖然我已經(jīng)實驗多次,但為了你的硬盤的安全,請仔細(xì)看完以下說明。
1.如果你的硬盤數(shù)據(jù)很重要,你最好別使用以上任何的程序,我可不能確保萬無一失?。。?!
2.如果你一定要執(zhí)行以上程序,請先退到DOS狀態(tài)(關(guān)閉系統(tǒng)并退到DOS狀態(tài)或純DOS狀態(tài)),因為在程序中使用了一些BIOS的低級軟中斷調(diào)用指令,無法在Windows 95下運(yùn)行。
3.在運(yùn)行以上程序之前,請先準(zhǔn)備好一張好的軟盤,插好,運(yùn)行Save.exe。把硬盤的第一個扇區(qū)保存好,并DIR一下,確保有一個512字節(jié)的HDBOOT.DAT文件。把restore.exe文件也拷貝到該軟盤上,以備不測。
4.運(yùn)行multigo.exe,根據(jù)提示,按y鍵,多引導(dǎo)就安裝成功,重啟動你就可以看見一個選擇菜單了。一開始,你也許搞不懂應(yīng)選擇哪一項,不過就四個選項,試一試,總能進(jìn)入一個操作系統(tǒng)的。不過多系統(tǒng)引導(dǎo)并不那么簡單,我將在下面進(jìn)行進(jìn)一步分析。
5.如果你不想要多引導(dǎo)功能了,只要簡單的運(yùn)行一下stanBoot.exe,就可以恢復(fù)原來的設(shè)置了,保留當(dāng)前的分區(qū)表。如果實在不行,插好保存有硬盤備份文件HDBOOT.DAT的軟盤,運(yùn)行restore.exe,就可以恢復(fù)到實驗之初的狀態(tài)。
6.用fdisk /mbr也可以設(shè)置標(biāo)準(zhǔn)的啟動代碼,應(yīng)用當(dāng)前的分區(qū)表信息。
可能遇到的一些情況:
1.BIOS的Virus Warning開關(guān)使能了,導(dǎo)致每次對硬盤主引導(dǎo)分區(qū)寫入時,都要警告一番。你可以將它Disable.
2.運(yùn)行以上程序時出現(xiàn)了error字樣。這是因為在Windows狀態(tài)下無法進(jìn)行低級操作,請退到DOS狀態(tài)(關(guān)閉系統(tǒng)并退到DOS狀態(tài)或純DOS狀態(tài))。
3.系統(tǒng)無法引導(dǎo),四個選項都試過了。請重啟動,再試一遍。如果還不行,請用restor.exe進(jìn)行恢復(fù)。如果你沒有進(jìn)行備份,我只好同情你了......
4.錯誤的運(yùn)行了別人軟盤上的restore.exe文件,并把他的硬盤主引導(dǎo)區(qū)HDBOOT.DAT文件寫入了你的硬盤。請用你自己的備份HDBOOT.DAT,再恢復(fù)一次。如果沒有備份,我也是愛莫能助了......別以為這是一個笑話,就有一個同學(xué)把我的備份軟盤拿去運(yùn)行了一下,然后我就只有看著他重新分區(qū)硬盤了,好傷心......
5.菜單的出現(xiàn)速度很慢或很快,不好意思,我通過一個簡單的循環(huán)來實現(xiàn)延時,與計算機(jī)的速度有關(guān),你可以修改源代碼。
6.再有問題,你就自我解決了,我要"逃避責(zé)任"了,xixi.......
關(guān)于多操作系統(tǒng)的引導(dǎo):
1.主引導(dǎo)分區(qū)表中只能容納四個表項,即四個主區(qū)。但為了分更多的區(qū),人們可以把任一表項設(shè)為擴(kuò)展分區(qū)。擴(kuò)展分區(qū)所指向的第一個扇區(qū)并不是引導(dǎo)程序,而是一個類似于主引導(dǎo)區(qū)的結(jié)構(gòu)。
2.我的multigo.exe程序不支持?jǐn)U展分區(qū)的引導(dǎo)(Linux的lilo可以),所以最多只有四個
可引導(dǎo)的系統(tǒng),菜單選項的名稱可以通過源程序進(jìn)行修改。
3.關(guān)于如何安裝多個操作系統(tǒng),我很難一下子說明白。我只想指明一點,那就是DOS或Windows把激活的啟動分區(qū)當(dāng)成C:盤,其余類推。而且把其啟動信息(代碼)放在該啟動分區(qū)的第一個扇區(qū)上。故為了把dos,windows往某一個分區(qū)里安裝,你必須把該分區(qū)激活成成可啟動分區(qū)(你可以使用fdisk;也可以在安裝了multigo后,選擇某一項進(jìn)入,可能會死機(jī),因為沒有啟動信息,但不要緊,這時該分區(qū)已被激活),然后重新啟動,進(jìn)行安裝。
4.一般,我們的硬盤只有一個主區(qū),一個擴(kuò)展分區(qū),如何產(chǎn)生多個主區(qū)呢?有人在雜志上介紹用Norton的Diskedit工具,我一直是以這樣一個方法完成的。不過這個方法很煩瑣,我不想介紹了。你可以另想辦法了。當(dāng)然,如果你要安裝的是Linux,這一切就不要操心了,其自帶了工具。
5.對于DOS和Windows 95的安裝,它們都要重新寫硬盤的主引導(dǎo)扇區(qū),相當(dāng)于fdisk /mbr。所以,要重新運(yùn)行multigo.exe,安裝多引導(dǎo)系統(tǒng)。
從這個程序完成到今天,有近兩年的時間了。一直也沒有修改,偶爾還是用著,雖然不是那么方便,但對于我自己倒無所謂。設(shè)計之初是為了安裝linux,后來還同時安裝了Windows NT,以及多個Windows 95,效果還行。后來,由于無法啟動擴(kuò)展分區(qū),我現(xiàn)在一直使用的是Linux的lilo,我的一個同學(xué)則在使用我的multigo。今天也并非突發(fā)奇想要發(fā)表,早有這種打算,因為見到很多人對于多系統(tǒng)引導(dǎo)和硬盤主引導(dǎo)區(qū)的不了解。只是文檔的說明很繁,一直就擱下了.......
今天程序終于與大家見面了,是否已經(jīng)人老珠黃?但愿大家能喜歡,并在此基礎(chǔ)上進(jìn)一步發(fā)揮想象力,把程序做得更完美,這才是我的最終愿望。
由于時日已久,當(dāng)初又沒有寫文檔,現(xiàn)在寫有點吃力。故,如果你有興趣,可以參考以下的書目,再研究我的代碼。
聲明:
我不對運(yùn)行以上程序所產(chǎn)生的任何結(jié)果負(fù)責(zé),一切責(zé)任自負(fù)。
附硬盤主引導(dǎo)區(qū)簡單的結(jié)構(gòu):
偏移 說明
00
主引導(dǎo)程序
1BE
第一分區(qū)表
1CE
第二分區(qū)表
1DE
第三分區(qū)表
1EE
第四分區(qū)表
1FE
55H
1FF
AAH
分區(qū)表項格式:
偏移 說明
00 BOOT ID 80H為可引導(dǎo),否則為00
01 此分區(qū)開始的磁頭編號
02-03 扇區(qū)值及柱面值
04 操作系統(tǒng)的ID值
05 此分區(qū)結(jié)束的磁頭編號
06-07 此分區(qū)結(jié)束的扇區(qū)及柱面值
08-11 此分區(qū)前的扇區(qū)總數(shù)
12-15 此分區(qū)所含的扇區(qū)總數(shù)
參考書:
《硬盤數(shù)據(jù)保護(hù)技術(shù)手冊》
99.5.31
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -