the 1st edition: 2012/02/11 the 2nd edition: 2013/02/05 the 3rd edition: 2014/07/24
從 source code 編譯 bochs 2.5.1/bochs 2.6.6/bochs 2.6.8, 通常我會需要以下這兩種版本的除錯方式。
使用內建 debugger
因為需要內建 debug 的功能, 所以從 source code 編譯開始 (通常預先編譯好的版本都沒這功能)。這只能針對組合語言除錯。download source code: http://jaist.dl.sourceforge.net/project/bochs/bochs/2.6.6/bochs-2.6.6.tar.gz
apt-get build-dep bochs 會安裝編譯 bochs 所需要的 library
apt-get build-dep bochs apt-get install libreadline6-dev libsdl1.2-dev libwxgtk2.8-dev 預設會使用 intel syntax, 想要改 at&t 語法的話可以修改重新編譯有點麻煩, 請手動刪除 *.o, 不要用 make clean, 若是第一次編譯, 就沒這問題。 ./configure --enable-debugger --enable-debugger-gui --enable-iodebug --enable-readline --with-sdl --with-x11 --with-x --with-wx --enable-disasm --enable-smp make make install --enable-smp : 多 cpu 支援。
readline 建議加上, 你能想像 dos 沒有 doskey 或是 bash 沒有 history 的功能嗎?
我在 debian jessie x64 上遇到一些問題, 改用 gcc 4.6, g++ 4.6, 並拿掉 --with-wx
export CC=gcc-4.6 export CXX=g++-4.6 ../bochs-2.6.6/configure --enable-debugger --enable-debugger-gui --enable-iodebug --enable-readline --with-sdl --with-x11 --with-x --with-wx --enable-disasm
最後 link 還得手動把 -lpthread 加入 Makefile LIBS 變數, 才能編譯成功。
ls /usr/local/bin/ 就可以看到相關檔案:
bochs bxcommit bximage
複製 /usr/local/share/doc/bochs/bochsrc-sample.txt 為自己的 bochs 設定值檔案 bb, 這很重要, 請不要使用舊版的設定, 可能無法正常啟動 bochs, 然後修改需要的設定值。
執行 bochs:
bochs -f bb
bochs 模擬的硬體:
http://bochs.sourceforge.net/doc/docbook/user/features.html
使用 GDB 來配合除錯
使用Bochs和GDB对内核进行源代码级调试 (連接已經失效): http://osfromscratch.org/articlescn/5-articlecn/16-bochsgdbqemu + gdb 的版本: http://dc0d32.blogspot.tw/2010/03/debugging-kernel-with-qemu-and-gdb.html
這兩種 debug 方式不能並存, 所以得編譯兩種不同的版本。
support remote gdb:
./configure --prefix=/home/descent/bochs-2.5.1-gdb --enable-gdb-stub --enable-debugger-gui --enable-iodebug --enable-readline --with-sdl --with-x11 --with-x --with-wx --enable-disasm
這個方法好酷, 可以針對 c 語言除錯, 不用辛苦和組合語言拼鬥。
From write_os |
bochs 執行時需要設定檔, 這個部份比較麻煩, 安裝目錄會有一個範例, 以我的例子是在
/home/descent/bochs-2.6.8-default-debug/share/doc/bochs/bochsrc-sample.txt
需要修改這個, 在使用 -f 載入這個設定檔。
/home/descent/bochs-2.6.8-default-debug/bin/bochs -f bochsrc-sample.txt
不同版本的設定檔可能無法使用, 若新版 bochs 無法使用舊版設定檔, 請從範例修改。
常用 command
有些命令似乎有改過, 和書中 (書上的版本比較舊) 提的有些不同切換反組譯的組合語言程式碼是 at&t 還是 intel 語法。
u switch-mode
觀察記憶體指令
from 0x0007d20 開始 5 byte 以 16 進位顯示
x /5xb 0x0007d20 x /5xbm 0x0007d20r, sreg 分別秀出 register 的值
r
eax: 0x00001301 4865 ecx: 0x00090005 589829 edx: 0x000f0000 983040 ebx: 0x0000000c 12 esp: 0x0000ffff 65535 ebp: 0x00007c4c 31820 esi: 0x000e7c84 949380 edi: 0x00007c84 31876 eip: 0x00007c11 eflags 0x00000046: id vip vif ac vm rf nt IOPL=0 of df if tf sf ZF af PF cf
sreg
es:0x0000, dh=0x00009300, dl=0x0000ffff, valid=1 Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed cs:0x0000, dh=0x00009300, dl=0x0000ffff, valid=1 Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed ss:0x0000, dh=0x00009300, dl=0x0000ffff, valid=7 Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed ds:0x0000, dh=0x00009300, dl=0x0000ffff, valid=1 Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed fs:0x0000, dh=0x00009300, dl=0x0000ffff, valid=1 Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed gs:0x0000, dh=0x00009300, dl=0x0000ffff, valid=7 Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed ldtr:0x0000, dh=0x00008200, dl=0x0000ffff, valid=1 tr:0x0000, dh=0x00008b00, dl=0x0000ffff, valid=1 gdtr:base=0x000fbb67, limit=0x30 idtr:base=0x00000000, limit=0x3ff
bochs 2.4.5 設定 (linux)
the 1st edition: 20111007bochs 2.4.5 已經過時, 這只是紀錄用。
binary 安裝方式:
2.4.5 bochs 的設定檔和之前不同, 從 /etc/bochs-init/bochsrc 修改比較沒問題,
這幾個 ui 相關 library 最好也要安裝, 免得有什麼奇怪的錯誤訊息。
apt-get install bochs-wx bochs-x bochs-sdl
可能和這一行有關, sdl 大概需要安裝 sdl 的 library, wx, x 可能是 wx, x lib。
display_library: sdl
有出現 ROM: System BIOS must end at 0xfffff
修改 romimage
#romimage: file=/usr/share/bochs/BIOS-bochs-latest, address=0xf0000 romimage: file=/usr/share/bochs/BIOS-bochs-latest
config_interface: textconfig #romimage: file=/usr/share/bochs/BIOS-bochs-latest, address=0xf0000 romimage: file=/usr/share/bochs/BIOS-bochs-latest megs: 32 vgaromimage: file=/usr/share/vgabios/vgabios.bin floppya: 1_44=freedos.img, status=inserted floppyb: 1_44=pm.img, status=inserted boot: a mouse: enabled=0
hd image 的製作方式:
http://bochs.sourceforge.net/doc/docbook/user/howto.html
沒有留言:
張貼留言
使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。
我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。