溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

調(diào)試環(huán)境的搭建(三)

發(fā)布時(shí)間:2020-05-26 06:20:40 來(lái)源:網(wǎng)絡(luò) 閱讀:913 作者:上帝之子521 欄目:系統(tǒng)運(yùn)維

        上節(jié)博客中我們寫(xiě)了一個(gè)主引導(dǎo)程序,運(yùn)行的還算完美,已經(jīng)正確的實(shí)現(xiàn)了我們想要的功能。那么問(wèn)題來(lái)了,它只是顯示一個(gè)字符串,如果在字符串沒(méi)有顯示出來(lái)程序就掛掉了,那么我們此時(shí)應(yīng)如何去查證?換句話(huà)說(shuō),如何調(diào)試主引導(dǎo)區(qū)的代碼?今天我們便來(lái)介紹下另一款優(yōu)秀的虛擬機(jī)軟件(Bochs)。

        先來(lái)看看 Bochs 的一些特點(diǎn):1、專(zhuān)業(yè)模擬 x86 架構(gòu)的虛擬機(jī);2、它是開(kāi)源并且可移植度較高,源碼是由 C++ 編寫(xiě)的;3、支持操作系統(tǒng)開(kāi)發(fā)過(guò)程中的斷點(diǎn)調(diào)試;4、通過(guò)簡(jiǎn)單的配置就能夠運(yùn)行于絕大多數(shù)主流的操作系統(tǒng)。

        那么支持調(diào)試功能的 Bochs 版本怎樣進(jìn)行配置呢?步驟如下

        1、下載源碼:https://sourceforge.net/projects/bochs/files/

        2、解壓縮 bochs-2.x.x.tar.gz 得到 bochs-2.x.x 文件夾

        3、進(jìn)入源碼目錄:cd bochs-2.x.x

        4、進(jìn)行配置:./configure --enable-debugger --enable-disasm

        5、make

        6、make install

        

        經(jīng)過(guò)以上六步就完成了 Bochs 的環(huán)境搭建了,值得注意的是博主在搭建過(guò)程中出現(xiàn)了一個(gè)錯(cuò)誤,在第五步 make 的時(shí)候出現(xiàn)了:/usr/bin/ld: gui/libgui.a(gtk_enh_dbg_osdep.o): undefined reference to symbo 的錯(cuò)誤以導(dǎo)致不能繼續(xù)執(zhí)行下去,經(jīng)過(guò)搜查資料,解決辦法是在 bochs-2.x.x 文件夾里的 Makefile,在92行左右找到 LIBS =。。。,在這一行最后面添加 -lpthread 就 ok 了。注:修改完成之后不能重新configure,不然添加的-lpthread會(huì)消失,添加后直接make就可以了。

        在搭建好環(huán)境之后我們便需要來(lái)配置一個(gè)啟動(dòng)文件 bochsrc.txt ,文件內(nèi)容如下

調(diào)試環(huán)境的搭建(三)

        關(guān)于上面啟動(dòng)文件的中的幾個(gè)路徑確定方法如下:1、確定 bochs 的安裝路徑:which bochs;2、安裝 vgabios,確定的它的路徑:whereis vgabios。

        下來(lái)我們來(lái)看看啟動(dòng) bochs 虛擬機(jī)的方法,分為兩種:顯示啟動(dòng)和隱式啟動(dòng)

        a> 顯示啟動(dòng):bochs -f bochsrc_file;

        b> 隱式啟動(dòng):bochs

        調(diào)試環(huán)境的搭建(三)

        那么如何來(lái)驗(yàn)證調(diào)試環(huán)境呢?我們啟動(dòng) bochs 后按 6 來(lái)模擬啟動(dòng),然后輸入 continue,如果出現(xiàn)的模擬終端顯示出我們所要打印的字符串,那便算是我們已經(jīng)成功安裝 bochs 虛擬機(jī)了。下來(lái)看看最后的效果圖

調(diào)試環(huán)境的搭建(三)

        我們?cè)谳斎?bochs 隱式啟動(dòng)方式后,然后再輸入 6 來(lái)進(jìn)行模擬啟動(dòng)終端,效果如下

調(diào)試環(huán)境的搭建(三)

        我們看到在輸入 continue 后終端成功的出現(xiàn)我們自己的輸出的字符串,證明此時(shí)我們的 bochs 環(huán)境已經(jīng)搭建成功了。那么我們?nèi)绾蝸?lái)進(jìn)行 bochs 的調(diào)試(類(lèi)似與 Linux 中的 GDB 調(diào)試)呢? bochs 常用的一些調(diào)試命令如下

調(diào)試環(huán)境的搭建(三)

        我們來(lái)嘗試下設(shè)置斷點(diǎn),如下

調(diào)試環(huán)境的搭建(三)

        我們看到在設(shè)置斷點(diǎn) 0x7c00 之后,info 看下斷點(diǎn)信息,確實(shí)是在 0x7c00 處打了個(gè)斷點(diǎn)。繼續(xù) continue 執(zhí)行,發(fā)現(xiàn)這時(shí)的虛擬機(jī) bochs 已經(jīng)上電成功。我們看到接下來(lái)它要執(zhí)行的是 mov ax, cs 這條指令,是不是我們當(dāng)時(shí)所寫(xiě)的 start 的第一條指令呢?確實(shí)是的,那么它后面的 8cc8 是什么意思呢?它指的是這條指令所對(duì)應(yīng)地址的數(shù)據(jù),下來(lái)我們繼續(xù)執(zhí)行 continue,看看最后效果

調(diào)試環(huán)境的搭建(三)

        我們看到已經(jīng)成功執(zhí)行了我們自己編寫(xiě)的主引導(dǎo)程序。下來(lái)我們執(zhí)行下單步調(diào)試,看看結(jié)果

調(diào)試環(huán)境的搭建(三)

        我們看到 step 單步調(diào)試執(zhí)行的結(jié)果和我們之前所編寫(xiě)的主引導(dǎo)程序的代碼是一樣的。通過(guò)今天對(duì)調(diào)試環(huán)境 bochs 的搭建,總結(jié)如下:1、bochs 是一款專(zhuān)業(yè)模擬 x86 架構(gòu)的虛擬機(jī);2、從源碼安裝 bochs 可以獲得調(diào)試功能的支持;3、bochs 的啟動(dòng)配置文件是正確運(yùn)行關(guān)鍵;4、bochs 支持?jǐn)帱c(diǎn)調(diào)試,其調(diào)試命令與 GDB 調(diào)試類(lèi)似。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI