在輸入bochs -f bochsrc後,還有幾個選項,只需要輸入6然後回車或直接按回車即可啓動操作系統,不過它仍然停在那裏而不是立刻執行。這時會出現<bochs:1>,等待我們操作。
首先按照書上給的例子模擬一遍過程。
<bochs:1> b 0x7c00 (在程序入口處設置斷點)
<bochs:2>c(執行到斷點位置,這時雖然Bochs上有內容,但是"Hello, OS world!"還未顯示)
<bochs:3>dump_cup(不知道早些的版本是否能執行這個,反正我的Bochs2.6.1中這個命令已經不能用了,會提示:3: syntax error at 'dump_cpu',用info cpu、r、fp、sreg、creg命令來代替。而且我在使用info cpu命令時,會提示The CPU doesn't support AVX state !,從Bochs源碼中可以看到如果BX_SUPPORT_AVX值爲假,會打印此條語句。相關內容可參考此文章)
<bochs:4>x /64xb 0x7c00 (查看線性地址內容)
<bochs:5>n(單步執行)
<bochs:6>trace-reg on(開啓“每執行一條指令就打印CPU信息”選項)
<bochs:7>n(繼續單步執行)
<bochs:8>c(繼續執行,會發現"Hello, OS world!"顯示出來了)
輸入help或h,然後回車,Bochs會打印如下內容:
h|help - show list of debugger commands
h|help command - show short command description
-*- Debugger control -*-
help, q|quit|exit, set, instrument, show, trace, trace-reg,
trace-mem, u|disasm, ldsym, slist
-*- Execution control -*-
c|cont|continue, s|step, p|n|next, modebp, vmexitbp
-*- Breakpoint management -*-
vb|vbreak, lb|lbreak, pb|pbreak|b|break, sb, sba, blist,
bpe, bpd, d|del|delete, watch, unwatch
-*- CPU and memory contents -*-
x, xp, setpmem, writemem, crc, info,
r|reg|regs|registers, fp|fpu, mmx, sse, sreg, dreg, creg,
page, set, ptime, print-stack, ?|calc
-*- Working with bochs param tree -*-
show "param", restore
網上有許多講bochs調試命令的文章,我把書上的內容以及解釋列在下面:
行爲 | 指令 | 舉例 |
---|---|---|
在某物理地址設置斷點 | b addr | b 0x30400 |
顯示當前所有斷點信息 | info break | info break |
繼續執行,直到遇上斷點 | c | c |
單步執行 | s | s |
單步執行,遇到函數則跳過 | n | n |
查看寄存器信息 | info cpu r fp sreg creg |
info cpu r fp sreg creg |
查看堆棧 | print-stack | print-stack |
查看內存物理地址內容 | xp /nuf addr | xp /40bx 0x9013e |
查看線性地址內容 | x /nuf addr | x /40bx 0x13e |
反彙編一段內存 | u start end | u 0x30400 0x3040D |
反彙編執行的每一條指令 | trace-on | trace-on |
每執行一條指令就打印CPU信息 | trace-reg | trace-reg on |
在xp和x命令中,nuf表示指定打印多少信息。
其實bochs調試跟gdb挺像的~
前兩章到此結束,第三章內容好像不少的樣子。。去看第三章了~