歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Ubuntu上使用Bochs

Ubuntu上使用Bochs

日期:2017/2/28 13:48:17   编辑:Linux教程

Bochs是一個不錯的模擬器,僅以此文記錄Ubuntu上一些使用方法。

安裝bochs

這個問題看似很簡單,但是實際上用的時候你會發現一個問題。在ubuntu上你要這麼裝:

apt-get install bochs
apt-get install bochs-x

如果不裝第二個,執行的時候會報一個錯。

>>PANIC<< dlopen failed for module ‘x’: file not found

運行最簡單的一個MBR

bochs的運行很簡單,執行如下命令即可。

bochs -f bochsrc

關鍵信息就在這個bochsrc的配置文件中了。這裡貼出一個最簡單,只運行一個MBR的配置文件。

###############################################################
# Configuration file for Bochs
###############################################################

# how much memory the emulated machine will have
megs: 32

# filename of ROM images
romimage: file=/usr/share/bochs/BIOS-bochs-latest
vgaromimage: file=/usr/share/vgabios/vgabios.bin

# what disk images will be used
floppya: 1_44=a.img, status=inserted

# choose the boot disk.
boot: floppy

# where do we send log messages?
# log: bochsout.txt

# disable the mouse
mouse: enabled=0

# enable key mapping, using US layout as default.
#keyboard_mapping: enabled=1, map=/usr/share/bochs/keymaps/x11-pc-us.map

其中我關心的是啟動選項和啟動盤的選擇。

完整例子的文件

我把我使用的相關文件給出,方便有興趣的同學使用。

boot.asm – MBR代碼

org    07c00h                      ; 告訴編譯器程序加載到7c00處
    mov    ax, cs
    mov    ds, ax
    mov    es, ax
    call    DispStr                ; 調用顯示字符串例程
    jmp    $                       ; 無限循環 $代表當前地址
DispStr:
    mov    ax, BootMessage
    mov    bp, ax                  ; ES:BP = 串地址
    mov    cx, msgLen              ; CX = 串長度
    mov    ax, 01301h              ; AH = 13,  AL = 01h
    mov    bx, 000ch               ; 頁號為0(BH = 0) 黑底紅字(BL = 0Ch,高亮)
    mov    dl, 0                   ; 將DL中的ASCII碼顯示到屏幕,將'\0'送到DL中,並顯示
    int    10h                     ; 10h 號中斷
    ret                            ; 返回到調用處
BootMessage:        db    "Hello, OS world!"
msgLen: equ $ - BootMessage
times     510-($-$$)    db    0    ; 填充剩下的空間,使生成的二進制代碼恰好為512字節
dw     0xaa55                      ; 結束標志

makefile – 制作帶有MBR的軟盤

all: a.img

a.img: boot.asm
    nasm boot.asm -o boot.bin
    dd if=boot.bin of=a.img
    dd if=/dev/zero of=a.img seek=1 bs=512 count=2879

clean:
    rm -f a.img boot.bin

bochsrc – 運行bochs的配置文件

見上文

vm_start.sh – 啟動MBR

bochs -f bochsrc

有了這些,大家就可以運行起來了。雖然這個非常簡單,但能跑起來感覺還是很棒的。

嘗試調試MBR

使用bochs的關鍵原因就是因為bochs有調試功能。 那就先來拿這個MBR來做一個簡單的實驗。

bochs -f bochsrc

啟動後,在linux環境上,就會停在那裡。

在 0x7c00 處設置斷點

pb 0x7c00

continue

設置完斷點就讓他繼續執行吧。

c

反匯編 0x7c00 0x7c1e

這個例子太簡單,我們就簡單看一下0x7c00內存上的代碼是不是我們寫入的代碼。

可以看到,這個就是我們寫入boot.asm的代碼。

查看寄存器

再看一下現在cs段和rip:

sreg

r

確認了下一條指令是要執行 0x0000: 0x7c00地址。

更多Ubuntu相關信息見Ubuntu 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=2

Copyright © Linux教程網 All Rights Reserved