Bochs调试Linux内核 - 定位内核中的变量或数据结构
到此網(wǎng)址下載,
http://oldlinux.org/Linux.old/bochs/linux-0.12-080324.zip
解壓以后如下;?
第一個(gè)文件是Bochs安裝文件;安裝之;安裝之后如下圖;同時(shí)在下圖目錄新建0.11目錄;
把下載的如下內(nèi)容拷貝過(guò)來(lái); .bxrc, 這是bochs配置文件;
bochs配置文件包含如下兩行,
? ??floppya: 1_44="bootimage-0.12-hd", status=inserted
? ? floppyb: 1_44="diskb.img", status=inserted
這是指定軟驅(qū)A插入載有0.12版本的內(nèi)核鏡像的軟盤(pán); diskb.img,這里面可能是一些工具;
然后在此目錄建立一個(gè)run.bat;內(nèi)容如下圖;
?安裝目錄根據(jù)自己的更改;運(yùn)行此bat;如果寫(xiě)錯(cuò)?bochsrc-0.12-hd.bxrc ,則可能出現(xiàn)類(lèi)似下圖錯(cuò)誤;
運(yùn)行以后,正常就進(jìn)到 <bochs:1> 停止;0.12版本內(nèi)核已裝載;可以輸入調(diào)試命令;
先在7c00設(shè)一個(gè)斷點(diǎn),然后下一行再輸入 c ,執(zhí)行到斷點(diǎn);
執(zhí)行到斷點(diǎn)如下圖;這里是一條 mov ax, 0x07c0 指令;根據(jù)資料,這條指令是一些操作系統(tǒng)開(kāi)始引導(dǎo)的起點(diǎn);
參照,https://blog.csdn.net/bcbobo21cn/article/details/105314444
然后看一下;此目錄下還有SYSTEM.MAP文件;里面是內(nèi)核的函數(shù)和變量的地址;這是編譯內(nèi)核時(shí)產(chǎn)生的;是別人做的,我不會(huì)做;
利用此文件可以在調(diào)試時(shí)快速定位到感興趣的變量或函數(shù);
假設(shè)要定位到buffer_init函數(shù),地址0xf488;
輸入lb 0xf488;在此地址設(shè)一個(gè)斷點(diǎn);lb = lbreak;? ? l,應(yīng)該是line的意思;線性地址;
然后輸入 c 繼續(xù)執(zhí)行;但是就掛了;如下圖;前頭相關(guān)的內(nèi)容還沒(méi)看,可能還有些配置沒(méi)弄完;
再試另外的地址也是掛掉;
主要參考的?Linux內(nèi)核完全剖析 - 基于0.12內(nèi)核 一書(shū);還有,
? ??bochs調(diào)試linux 0.11內(nèi)核_envy2008的專欄-CSDN博客
總結(jié)
以上是生活随笔為你收集整理的Bochs调试Linux内核 - 定位内核中的变量或数据结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: GIS坡度分析入门实例 - 使用Supe
- 下一篇: Bochs调试Linux内核初步学习 -