標籤:作業系統 自製作業系統 bochs 調試
在上一篇文章《環境搭建以及第一個Hello-World》中,筆者講了如何安裝 bochs 以及運行一個 helloworld 作業系統,但是使用上一篇文章中的方法安裝的 bochs 是不支援調試的,下面我講介紹如何使用源碼編譯的方法來安裝 bochs,以及使用 bochs 來調試作業系統。
編譯安裝 Bochs
http://sourceforge.net/projects/bochs/files/bochs/2.6.8/
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> c00000003305i[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 0x020x00007c08 <bogus+ 8>: 0x00 0xeb 0xfe 0xb8 0x1e 0x7c 0x89 0xc50x00007c10 <bogus+ 16>: 0xb9 0x0d 0x00 0xb8 0x01 0x13 0xbb 0x0c0x00007c18 <bogus+ 24>: 0x00 0xb2 0x00 0xcd 0x10 0xc3 0x48 0x650x00007c20 <bogus+ 32>: 0x6c 0x6c 0x6f 0x2c 0x20 0x77 0x6f 0x720x00007c28 <bogus+ 40>: 0x6c 0x64 0x21 0x00 0x00 0x00 0x00 0x000x00007c30 <bogus+ 48>: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x000x00007c38 <bogus+ 56>: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00<bochs:5> nNext at t=14041070(0) [0x000000007c02] 0000:7c02 (unk. ctxt): mov ds, ax ; 8ed8<bochs:6> trace-reg onRegister-Tracing enabled for CPU0<bochs:7> nNext at t=14041071eax: 0x00000000 0ecx: 0x00090000 589824edx: 0x00000000 0ebx: 0x00000000 0esp: 0x0000ffd6 65494ebp: 0x00000000 0esi: 0x000e472c 935724edi: 0x0000ffac 65452eip: 0x00007c04eflags 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……
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
文章來源:http://blog.luoyuanhang.com
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。(文章來源:http://blog.luoyuanhang.com)
【從頭開始寫作業系統系列】使用 Bochs 調試作業系統