天天看點

開源的Bochs虛拟機軟體

如果你準備寫一個作業系統或者隻是體驗一下linux的開機流程,寫一個簡單的bootloader,你可能會需要一個軟體–Bochs, Bochs是一個開源軟體,是你唯一可選擇的調試器.開源意味着你不需要花錢購買就可以使用它. 它用軟體來模拟處理器取指令和執行指令的過程,以及整個計算機硬體.當它開始運作時,就直接模拟計算機的啟動過程.正是因為如此,它才有可能做一些調試工作.很重要的一點,它本身就是一個虛拟機,類似于Virtualbox.是以,它也很容易就讓你單步跟蹤硬碟的控制權,檢視寄存器的内容和狀态.

Bochs的安裝

官網下載下傳安裝包解壓即可,主要是配置檔案,我的核心研究者的好盆友huloves發給了我一份配置檔案

# 若隻有一個軟碟,則使用 floppya即可,若有多個,則為floppya,floppyb...
#floppya: 1_44=a.img, status=inserted

# 選擇啟動盤符
#boot: floopy #預設從軟碟啟動,現在很少有軟碟了
boot: disk

# 設定日志檔案的輸出
log: bochs.out

# 開啟或關閉某些功能
# 關閉滑鼠,并打開鍵盤,鍵盤的路徑不一定是這個,比如我的是/usr/share/bochs/keymaps/x11-pc-us.map 
mouse: enabled=0
keyboard:keymap=/usr/local/share/bochs/keymaps/x11-pc-us.map 

# 硬碟設定,你需要使用bximage建立一個硬碟,然後它會傳回ata0-master所需要的資訊,path你需要改成你的絕對路徑
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master: type=disk, path="/home/huloves/bochs-2.6.11/hd60M.img", mode=flat, cylinders=121, heads=16, spt=63
ata0-slave: type=disk, path="/home/huloves/bochs-2.6.11/hd80M.img", mode=flat, cylinders=162, heads = 16, spt = 63
######################### 配置檔案結束 ###########################
           

建立硬碟結束,你需要将你的啟動引導Bootloader寫入你建立的硬碟中, if = 啟動引導檔案 of= 你剛建立的磁盤

dd if=boot.bin of=a.img bs=512count=1 conv=notrunc

你需要找的bochsrc所在位置,然後在指令行

bochs -f 配置檔案所在位置

,例如我的是這樣的

bochs -f /etc/bochs-init/bochsrc

啟動bochs虛拟機

就像一台真正的計算機一樣,Bochs的"處理器"加電後,要開始取指令執行指令.但,與真正的處理器不同的是,Bochs在執行它啟動之後的第一條指令之後,會停下來,等待你的調試指令.

開源的Bochs虛拟機軟體

1指的是實體記憶體位址

2指的是邏輯位址,即段寄存器CS和指令指針寄存器IP的内容,是以16進制顯示的,等效于0xf000:0xfff0

3指的是下一條要執行的指令的彙編代碼

3以注釋的形式指的是指令的機器碼部分

現代處理器在加電後,所有的高端的位址線都被強制為高電平,直到遇到并執行了第一個段間轉移指令,段間轉移指令是在兩個代碼段之間實施控制轉移,也就是同時改變段寄存器CS和指令指針寄存器IP的jmp指令,就像

jmp 0xf000:0xfff0

就是一個典型的例子.是以,當該指令執行後,處理器的實體位址就僅取決于CS和IP了.

開源的Bochs虛拟機軟體

接下來,介紹一些Bochs的調試指令

  • s(step): 執行下一條指令
  • b(break): 斷點調試指令
  • c(continue): 處理器不間斷的持續執行指令,如果設定了斷點,在斷點出停下來
    開源的Bochs虛拟機軟體
  • r(register): 顯示通用寄存器的内容
    開源的Bochs虛拟機軟體
  • sreg(segment register): 顯示段寄存器的内容
    開源的Bochs虛拟機軟體
  • xp(eXamine memory): 顯示指定實體記憶體地質處的内容
    開源的Bochs虛拟機軟體
  • n:跳過同一次指令的多次重複執行
  • u: 跳過條件轉移指令構造的特殊循環體
  • info eflags:檢視标志寄存器的狀态位,大寫為1,小寫為0
    開源的Bochs虛拟機軟體
  • xp: 查詢從某個位址開始的N個位元組的記憶體

    xp /Nbx 實體位址

    ,例如:顯示實模式下的中斷向量表’xp /1024bx 0’

繼續閱讀