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