調試環境的搭建(三)

        上節博客中我們寫了一個主引導程序,運行的還算完美,已經正確的實現了我們想要的功能。那麼問題來了,它只是顯示一個字符串,如果在字符串沒有顯示出來程序就掛掉了,那麼我們此時應如何去查證?換句話說,如何調試主引導區的代碼?今天我們便來介紹下另一款優秀的虛擬機軟件(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 ,文件內容如下

圖片.png

        關於上面啓動文件的中的幾個路徑確定方法如下:1、確定 bochs 的安裝路徑:which bochs;2、安裝 vgabios,確定的它的路徑:whereis vgabios。

        下來我們來看看啓動 bochs 虛擬機的方法,分爲兩種:顯示啓動和隱式啓動

        a> 顯示啓動:bochs -f bochsrc_file;

        b> 隱式啓動:bochs

        圖片.png

        那麼如何來驗證調試環境呢?我們啓動 bochs 後按 6 來模擬啓動,然後輸入 continue,如果出現的模擬終端顯示出我們所要打印的字符串,那便算是我們已經成功安裝 bochs 虛擬機了。下來看看最後的效果圖

圖片.png

        我們在輸入 bochs 隱式啓動方式後,然後再輸入 6 來進行模擬啓動終端,效果如下

圖片.png

        我們看到在輸入 continue 後終端成功的出現我們自己的輸出的字符串,證明此時我們的 bochs 環境已經搭建成功了。那麼我們如何來進行 bochs 的調試(類似與 Linux 中的 GDB 調試)呢? bochs 常用的一些調試命令如下

圖片.png

        我們來嘗試下設置斷點,如下

圖片.png

        我們看到在設置斷點 0x7c00 之後,info 看下斷點信息,確實是在 0x7c00 處打了個斷點。繼續 continue 執行,發現這時的虛擬機 bochs 已經上電成功。我們看到接下來它要執行的是 mov ax, cs 這條指令,是不是我們當時所寫的 start 的第一條指令呢?確實是的,那麼它後面的 8cc8 是什麼意思呢?它指的是這條指令所對應地址的數據,下來我們繼續執行 continue,看看最後效果

圖片.png

        我們看到已經成功執行了我們自己編寫的主引導程序。下來我們執行下單步調試,看看結果

圖片.png

        我們看到 step 單步調試執行的結果和我們之前所編寫的主引導程序的代碼是一樣的。通過今天對調試環境 bochs 的搭建,總結如下:1、bochs 是一款專業模擬 x86 架構的虛擬機;2、從源碼安裝 bochs 可以獲得調試功能的支持;3、bochs 的啓動配置文件是正確運行關鍵;4、bochs 支持斷點調試,其調試命令與 GDB 調試類似。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章