Bochs使用簡單教程


參考:https://www.geek-share.com/detail/2488796622.html

 
Bochs是一個開源的虛擬機。它可以實現vpc和vmware的大部分功能。你也可以像使用vmware一樣的在Bochs里面安裝操作系統。但是,由 於它是全模擬的。所以,速度要遠遠慢於vmware.這樣看來Bochs好像沒有什么優勢.是這樣嗎?在應用方面的確如此。

但是,在其他一個方面它是處於絕對優勢的。那就是它具有調試功能!這是一個讓人振奮的功能。這個功能在你調試操作系統或者其他一些在裸機上運行的 程序時候,會讓你有一種在寫windows下運行的應用程序的感覺。有時候它是我們的救命稻草。沒了它,也能活,但是肯定要糟糕的多。好了我們開始切入正 題。

一、 配置Bochs

實際上配置Bochs是很簡單的,為什么很多人不會配置呢?我覺的就是因為他使用和配置方式和普通程序不一樣——配置文件。實際上配置文件是和 ini文件、bat文件類似的。Bochs沒有給我們提供圖形界面的配置工具。這就需要我們自己來修改配置文件。

簡單的配置就可以讓你的操作系統在Bochs里面跑起來。用Bochs跑完整的linux和windows是不現實的。實在是太慢了。一般我們也 只能把他當成調試器來使用。現在,我們先看一下如何讓dos在他里面跑起來。如果你細心的話你會發現在Bochs文件夾里面有一個Bochsrc- sample.txt的文本文件。里面包含了所有了Bochs參數的信息。這個是官方的教程。可惜是英文的,而且我也沒有找到有中文的教程(不然也沒有我 這篇文章)。在這里我們僅僅介紹最簡單的配置選項。好了,廢話就不多說了。我們現在就開始。

我們以一個例子來說明,這個例子是我用來跑dos以及我自己的小操作系統的。下面就是我們要用到的最基本的選項:

# 在一行的最前面加上“#”表示這一行是注釋行。

# 內存,以MB為單位,對於dos來說最大可以訪問16MB

# 的內存,所以我就給了他16MB,你可以根據自己的機器來調整

megs: 16

# 下面兩句一般是不可以改的,至於干什么用的就不用我說

# 了。從他們的文件名就可以看出來。

romimage: file=../BIOS-Bochs-latest, address=0xf0000

vgaromimage: file=../VGABIOS-lgpl-latest

# 這個還用說嗎?當然是軟驅了,我想我們寫操作系統肯定是先

# 把操作系統放在軟盤(或映像)里面吧?在Bochs里面是可

# 以使用任意大小的軟驅映像的。可以是1.44或2.88,我一般使

# 用2.88。還有就是Bochs里面可以使用兩個軟驅。不過好像

# 我們並不經常這樣做。

floppya: 2_88=test.img, status=inserted

#floppyb: 1_44=floppyb.img, status=inserted

# 下面是硬盤,很簡單,還有就是Bochs也是可以支持多個硬

# 盤的。那么,硬盤文件是怎么生成的呢?我們可以發現硬盤是

# img格式的。你注意沒有在Bochs文件夾里有一個工具叫

# bximage.exe,我想你應該猜出來了。他就是用來生成這個硬盤

# 文件的工具。我在這兒還想說的是硬盤分三種格式的,最好選

#用growing類型。這種有一個好處就是節省硬盤空間,不過使用

#這種類型的硬盤還需要在下面加上mode = growing這個選項。

ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14

ata0-master: type=disk, path="dos.img", cylinders=306, heads=4, spt=17

# 下面這個就是光驅,沒什么好說的。如果你想使用物理光驅,

# 只要讓path=E:(我們假設E盤是光驅)

ata0-slave: type=cdrom, path="dos.iso", status=inserted

# 這個是啟動設備,可以使用cdrom(光驅)、c(硬盤)或floppy(軟

# 驅)。

#boot: cdrom

boot: c

#boot: floppy

# 這一句可以不要,他只是指定用來保存日志的文件。如果不指定的

# 話他就會輸出到命令控制台上。

log: Bochsout.txt

# 這一句是設置在開機時是否激活鼠標,Bochs對於鼠標的控制不是# 很好。建議如果不是特別需要的話不要激活他。在運行期間也可以點窗口右上角的鼠標圖標來激活他。

mouse: enabled=0

以上這些設置就可以讓你的DOS或自己的小操作系統在Bochs里面跑起來了。至於其他的一些高級支持,你可以查看Bochsrc- sample.txt里面的說明。不要害怕他,其實很簡單。關鍵是拋棄恐懼。

二、 啟動Bochs

配置文件已經寫好了,硬盤文件等也都已經弄好了。那么我們如何來啟動Bochs呢?很簡單,你右擊一下上面寫的那個配置文件(例如 myos.bxrc,注意:擴展名要是.bxrc。)選擇“運行”或雙擊即可。不過我一般都不這樣做,我一般是寫一個批處理文件。

很簡單,如下所示:

cd "d:\Bochs-2.2.1\dos"

..\Bochs.exe -q -f Bochsrc.bxrc

這樣做的好處就是無論這個啟動腳本放在哪兒都是可以使用的。那么,我們如何進入調試狀態呢?下面我們就來討論這個問題。

三、 調試功能

新建一個批處理文件,寫入一下內容:

cd "d:\Bochs-2.2.1\dos"

..\Bochsdbg.exe -q -f Bochsrc.bxrc

運行這個批處理文件,你就可以進入調試狀態了。不過你會發現,程序卡住了。沒有想普通運行狀態一樣進入你的dos操作系統。為什么?因為調試在等 待你的命令。你只有給他一個命令他才會繼續。我們輸入“c”,然后回車。是不是dos已經可是運行了?

如果沒有運行說明你輸入的窗口不對,你不會把c輸入到那個沒有光標的窗口了吧?如果真是那樣我真是服了你了。真的!但是,dos運行起來了,如何 在返回調試狀態?很簡單,按ctrl+c。什么你正在運行的程序被結束了?誰讓你在操作系統窗口中按了,我是說在調試窗口按。至於哪個是調試窗口,哪個是 操作系統窗口,我就不說了。如果你不知道你就干脆別使用Bochs了,也不要寫什么程序了,更不要開發什么操作系統了。為什么?因為你不可能成功。從這兒 就可以看出來。最好是找塊豆腐撞死,這樣你會很幸福的死去,不然你就會成為教育后代的典范——看到了嗎XXX是怎么死的,笨死的。呵呵!開個玩笑。你真要 不知道

千萬不要來找我,找我我也不告訴你。不好意思,我也不知道。那么,在調試狀態下我們可以干哪些事呢?你用過debug嗎?它能做的Bochs都能 做,它不能做的Bochs也可以做。下面就是一些常用的調試命令。

help

我最想告訴大家的是這個指令,因為他可以告訴我們一切。古語說:“授之以魚,不若授之以漁”。我覺的很有道理。但是,有些人就是不想學這種一勞永 逸的方法。所以,我還要繼續寫下去。

輸入help,回車。你會得到以下信息:

help - show list of debugger commands

help 'command'- show short command description

-*- Debugger control -*-

help, q|quit|exit, set, instrument, show, trace-on, trace-off,

record, playback, load-symbols, slist

-*- Execution control -*-

c|cont, s|step|stepi, p|n|next, modebp

-*- Breakpoint management -*-

vb|vbreak, lb|lbreak, pb|pbreak|b|break, sb, sba, blist,

bpe, bpd, d|del|delete

-*- CPU and memory contents -*-

x, xp, u|disas|disassemble, r|reg|registers, setpmem, crc, info, dump_cpu,

set_cpu, ptime, print-stack, watch, unwatch, ?|calc

需不需要我翻譯一下前兩句?那好吧。

help - 現實調試命令列表

help '命令' - 顯示某條命令的詳細用法。

命令分為哪些?很明顯,四類:調試控制,運行控制,斷點管理,CPU和內存控制。我不想在這兒一一介紹了。沒有必要,我只介紹一下最常用的就可以 了。

c:繼續,前面我們已經用過了。

s:單步執行。他還有一個擴展用法。

s n :執行n步。

b 0x7c00:在內存0x7c00處設置一個斷點.當程序執行到0x7c00處就自動進入到調試狀態.后面的這個數指的是內存的線性地址

。也可以使用10進制的數,但是好像沒有人會這樣做。

x /20 0x7c00: 以16進制的形式從內存的0x7c00開始顯示20個字的數據。這個是很常用的命令,但是需要注意的是他的顯示順序和16進制編輯器中的顯示順序有一點小 的區別。他的顯示是以字為單位的,而且在字中是從低到高顯示的.不過也沒有什么大不了的。你只要稍微注意一下就可以了。

dump_cpu:這個是我最長用的三個指令之一。他的功能是顯示現在的寄存器的狀態,詳細內容類似於:

eax:0x00000000, ebx:0x00000000, ecx:0x00000000, edx:0x00000683

ebp:0x00000000, esp:0x00000000, esi:0x00000000, edi:0x00000000

eip:0x0000fff0, eflags:0x00000002, inhibit_mask:0

cs:s=0xf000, dl=0x0000ffff, dh=0xff009bff, valid=1

ss:s=0x0000, dl=0x0000ffff, dh=0x00009300, valid=1

ds:s=0x0000, dl=0x0000ffff, dh=0x00009300, valid=1

es:s=0x0000, dl=0x0000ffff, dh=0x00009300, valid=1

fs:s=0x0000, dl=0x0000ffff, dh=0x00009300, valid=1

gs:s=0x0000, dl=0x0000ffff, dh=0x00009300, valid=1

ldtr:s=0x0000, dl=0x00000000, dh=0x00000000, valid=0

tr:s=0x0000, dl=0x00000000, dh=0x00000000, valid=0

gdtr:base=0x00000000, limit=0xffff

idtr:base=0x00000000, limit=0xffff

dr0:0x00000000, dr1:0x00000000, dr2:0x00000000

dr3:0x00000000, dr6:0xffff0ff0, dr7:0x00000400

cr0:0x00000010, cr1:0x00000000, cr2:0x00000000

cr3:0x00000000, cr4:0x00000000

u /20 0x7c00 :反匯編內存0x7c00處,反匯編的長度是20。你想不想知道dos的引導程序是什么樣子的?執行一下這個命令就可以了。你還可以使用這樣的命令 u /20 cs:0x120a,至於什么意思,我也不說了。

現在,我們已經介紹了6條命令了。夠了。對於日常應用已經完全夠用了。如果你想了解其他命令的用法只要執行一下help “命令名”就可以了(注意,命令上要帶有引號)。好了。現在已經把Bochs的基本功能介紹完了。你是不是感覺Bochs很簡單?對於簡單的應用來說,確 實如此。但是,想讓他支持一些高級功能就有點麻煩了。畢竟它是全模擬的虛擬機,所以在有些方面實現起來並不容易。但是,向網絡之類的功能還是可以支持的。 你只要看一下Bochsrc-sample.txt就知道了。我在這兒就不說了。我還要說的是Bochs不僅僅可以調試操作系統,還可以調試dos下的程 序。我們知道dos沒有多少好的調試器。那么我們完全可以使用Bochs來調試。你知道在程序的開頭輸出一下程序的段地址和偏移地址,然后暫定一下,在虛 擬機里面設置一下斷點就可以了。我一般都是在在程序里面潛入一句匯編:

jmp $

這樣在程序死循環的時候在調試窗口按下ctrl+c就可以看到他的段地址和偏移地址了。然后,在去掉這一句,設置一下斷點,運行這個程序。是不是 在指定位置中斷了?
內容來自用戶分享和網絡整理,不保證內容的准確性,如有侵權內容,可聯系管理員處理 點擊這里給我發消息
 
標簽:  職場 教程 休閑
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM