2019年8月29日 星期四

peter-dbg tutorial

使用bochs模擬器來撰寫屬於自己的作業系統時,可能會遇到一些程式上的Bug或是一些邏輯錯誤,在小型程式(大約幾百行程式碼)都很好解決,那麼我們是撰寫作業系統等級的程式,程式碼都是上萬行,因此需要一款較好用的Debugger,常見的Debugger有GDB (GNU Debuger)、DDD (Data Display Debugger,介面化的GDB),不過這些Debugger都不能觀察GDT (Global Descriptor Table)、IDT (Interrupt Descriptor Table)、LDT (Local Descriptor Table)、Page table、CR 0-4 register (Control Register)等等資訊,如果遇到是關於在建構Page table的問題,就很難知道是這個環節的Bug,因此這篇就是介紹功能強大的Debugger,” peter-dbg”。

一、安裝環境

1. Ubuntu 16.04 x64

2. Java jdk 7

二、peter-dbg 介面

a. 顯示記憶體上的值,另外可以切換GDT、IDT、LDT等等欄位,並觀察就些資訊

b. 顯示程式碼

c. 顯示暫存器和Stack,特別是可以觀察Control Register,另外可以切換Paging(觀察Page table的狀態)、Address translate (Virtual address或Linear address的Physical address轉換)


二、GDT 介面

切換到GDT的欄位,可以觀察GDT設置狀態。





三、IDT 介面

切換到IDT的欄位,可以觀察IDT是否設置正確。





四、LDT 介面

切換到LDT的欄位,可以確認LDT是否設置無誤。



五、Paging 介面

切換到Paging介面,可以觀察Page table分配的狀態,在設置Paging錯誤時可能會造成系統的崩潰,因此這樣就能確保是如預期的分配情形。


六、Address translate 介面

切換到Address translate介面,可以將Virtual address或Linear address轉換成Physical address,這樣能檢查GDT和Paging是否設置成功。


七、運行結果

bochs配置如下:

./configure --enable-debugger --enable-disasm --enable-debugger-gui --with-x11

運行指令如下:

這邊要記得加上-q的參數,不然bochs模擬器可能會運行不起來。

java -jar peter-bochs-debugger20130922.jar bochs -q bochsrc

此系統模擬3個不同的task,分別是task1、task2、task3,對應到的PID是2、3、4,實作簡易的Multi-tasking,這樣就完成非常小型的作業系統測試。