使用 Bochs 除錯作業系統
阿新 • • 發佈:2019-02-09
編譯安裝 Bochs
- 下載 bochs 原始碼
- 解壓之後進入該目錄,進行配置
sudo ./configure --enable-debugger --enable-disasm
- 編譯安裝
sudo make
sudo make install
這時,bochs 就編譯安裝完成了,接下來我們繼續使用上一篇文章中所使用的軟盤映像。
用 Bochs 除錯作業系統
啟動帶有除錯的 bochs 之後,我們會看到bochs 會進入一個選項介面,我們選擇『6.Begin simulation』就可以開始除錯了
部分 Bochs 除錯指令
行為 | 指令 | 舉例 |
---|---|---|
在某實體地址設定斷點 | b addr | b 0x7c00 |
顯示當前所有斷點資訊 | info break | info break |
繼續執行,直至遇到斷點 | c | c |
單步執行 | s | s |
單步執行(遇到函式跳過) | n | n |
檢視暫存器資訊 | info cpu r fp sreg creg |
info cpu r fp sreg cre |
檢視堆疊 | 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 |
- 我們可以使用 help 來檢視除錯幫助
舉例
採用上一篇文章中的映象來進行除錯
<bochs:1> b 0x7c00 <bochs:2> c 00000003305i[BIOS ] $Revision: 1.257 $ $Date: 2011/01/26 09:52:02 $ …… 00014041008i[BIOS ] Booting from 0000:7c00 (0) Breakpoint 1, 0x00007c00 in ?? () Next at t=14041069 (0) [0x000000007c00] 0000:7c00 (unk. ctxt): mov ax, cs ; 8cc8 <bochs:4> x /64xb 0x7c00 [bochs]: 0x00007c00 <bogus+ 0>: 0x8c 0xc8 0x8e 0xd8 0x8e 0xc0 0xe8 0x02 0x00007c08 <bogus+ 8>: 0x00 0xeb 0xfe 0xb8 0x1e 0x7c 0x89 0xc5 0x00007c10 <bogus+ 16>: 0xb9 0x0d 0x00 0xb8 0x01 0x13 0xbb 0x0c 0x00007c18 <bogus+ 24>: 0x00 0xb2 0x00 0xcd 0x10 0xc3 0x48 0x65 0x00007c20 <bogus+ 32>: 0x6c 0x6c 0x6f 0x2c 0x20 0x77 0x6f 0x72 0x00007c28 <bogus+ 40>: 0x6c 0x64 0x21 0x00 0x00 0x00 0x00 0x00 0x00007c30 <bogus+ 48>: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00007c38 <bogus+ 56>: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 <bochs:5> n Next at t=14041070 (0) [0x000000007c02] 0000:7c02 (unk. ctxt): mov ds, ax ; 8ed8 <bochs:6> trace-reg on Register-Tracing enabled for CPU0 <bochs:7> n Next at t=14041071 eax: 0x00000000 0 ecx: 0x00090000 589824 edx: 0x00000000 0 ebx: 0x00000000 0 esp: 0x0000ffd6 65494 ebp: 0x00000000 0 esi: 0x000e472c 935724 edi: 0x0000ffac 65452 eip: 0x00007c04 eflags 0x00000082: id vip vif ac vm rf nt IOPL=0 of df if tf SF zf af pf cf (0) [0x000000007c04] 0000:7c04 (unk. ctxt): mov es, ax ; 8ec0 <bochs:8> c ……