您好,登錄后才能下訂單哦!
上節博客中我們寫了一個主引導程序,運行的還算完美,已經正確的實現了我們想要的功能。那么問題來了,它只是顯示一個字符串,如果在字符串沒有顯示出來程序就掛掉了,那么我們此時應如何去查證?換句話說,如何調試主引導區的代碼?今天我們便來介紹下另一款優秀的虛擬機軟件(Bochs)。
先來看看 Bochs 的一些特點:1、專業模擬 x86 架構的虛擬機;2、它是開源并且可移植度較高,源碼是由 C++ 編寫的;3、支持操作系統開發過程中的斷點調試;4、通過簡單的配置就能夠運行于絕大多數主流的操作系統。
那么支持調試功能的 Bochs 版本怎樣進行配置呢?步驟如下
1、下載源碼:https://sourceforge.net/projects/bochs/files/
2、解壓縮 bochs-2.x.x.tar.gz 得到 bochs-2.x.x 文件夾
3、進入源碼目錄:cd bochs-2.x.x
4、進行配置:./configure --enable-debugger --enable-disasm
5、make
6、make install
經過以上六步就完成了 Bochs 的環境搭建了,值得注意的是博主在搭建過程中出現了一個錯誤,在第五步 make 的時候出現了:/usr/bin/ld: gui/libgui.a(gtk_enh_dbg_osdep.o): undefined reference to symbo 的錯誤以導致不能繼續執行下去,經過搜查資料,解決辦法是在 bochs-2.x.x 文件夾里的 Makefile,在92行左右找到 LIBS =。。。,在這一行最后面添加 -lpthread 就 ok 了。注:修改完成之后不能重新configure,不然添加的-lpthread會消失,添加后直接make就可以了。
在搭建好環境之后我們便需要來配置一個啟動文件 bochsrc.txt ,文件內容如下
關于上面啟動文件的中的幾個路徑確定方法如下:1、確定 bochs 的安裝路徑:which bochs;2、安裝 vgabios,確定的它的路徑:whereis vgabios。
下來我們來看看啟動 bochs 虛擬機的方法,分為兩種:顯示啟動和隱式啟動。
a> 顯示啟動:bochs -f bochsrc_file;
b> 隱式啟動:bochs
那么如何來驗證調試環境呢?我們啟動 bochs 后按 6 來模擬啟動,然后輸入 continue,如果出現的模擬終端顯示出我們所要打印的字符串,那便算是我們已經成功安裝 bochs 虛擬機了。下來看看最后的效果圖
我們在輸入 bochs 隱式啟動方式后,然后再輸入 6 來進行模擬啟動終端,效果如下
我們看到在輸入 continue 后終端成功的出現我們自己的輸出的字符串,證明此時我們的 bochs 環境已經搭建成功了。那么我們如何來進行 bochs 的調試(類似與 Linux 中的 GDB 調試)呢? bochs 常用的一些調試命令如下
我們來嘗試下設置斷點,如下
我們看到在設置斷點 0x7c00 之后,info 看下斷點信息,確實是在 0x7c00 處打了個斷點。繼續 continue 執行,發現這時的虛擬機 bochs 已經上電成功。我們看到接下來它要執行的是 mov ax, cs 這條指令,是不是我們當時所寫的 start 的第一條指令呢?確實是的,那么它后面的 8cc8 是什么意思呢?它指的是這條指令所對應地址的數據,下來我們繼續執行 continue,看看最后效果
我們看到已經成功執行了我們自己編寫的主引導程序。下來我們執行下單步調試,看看結果
我們看到 step 單步調試執行的結果和我們之前所編寫的主引導程序的代碼是一樣的。通過今天對調試環境 bochs 的搭建,總結如下:1、bochs 是一款專業模擬 x86 架構的虛擬機;2、從源碼安裝 bochs 可以獲得調試功能的支持;3、bochs 的啟動配置文件是正確運行關鍵;4、bochs 支持斷點調試,其調試命令與 GDB 調試類似。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。