Bochs的是一個(gè)高度可移植的開(kāi)源IA-32(x86)的PC寫(xiě)在C++仿真器
標(biāo)簽: Bochs 手機(jī)軟件 官網(wǎng):https://bochs.sourceforge.io/
《Bochs模擬器win7鏡像下載可上網(wǎng)》是一個(gè)開(kāi)放源代碼的x86平臺(tái)模擬器項(xiàng)目,它可以模擬PC上諸如BIOS、處理器、I/O、內(nèi)存等硬件設(shè)備,以至于用戶可以通過(guò)安裝在智能手機(jī)或者平板電腦上的Bochs來(lái)模擬運(yùn)行Windows,Linux或者DOS等等。
一、 配置Bochs
實(shí)際上配置Bochs是很簡(jiǎn)單的,為什么很多人不會(huì)配置呢?我覺(jué)的就是因?yàn)樗褂煤团渲梅绞胶推胀ǔ绦虿灰粯印渲梦募?shí)際上配置文件是和 ini文件、bat文件類似的。Bochs沒(méi)有給我們提供圖形界面的配置工具。這就需要我們自己來(lái)修改配置文件。
簡(jiǎn)單的配置就可以讓你的操作系統(tǒng)在Bochs里面跑起來(lái)。用Bochs跑完整的linux和windows是不現(xiàn)實(shí)的。實(shí)在是太慢了。一般我們也 只能把他當(dāng)成調(diào)試器來(lái)使用。現(xiàn)在,我們先看一下如何讓dos在他里面跑起來(lái)。如果你細(xì)心的話你會(huì)發(fā)現(xiàn)在Bochs文件夾里面有一個(gè)Bochsrc- sample.txt的文本文件。里面包含了所有了Bochs參數(shù)的信息。這個(gè)是官方的教程。可惜是英文的,而且我也沒(méi)有找到有中文的教程(不然也沒(méi)有我 這篇文章)。在這里我們僅僅介紹最簡(jiǎn)單的配置選項(xiàng)。好了,廢話就不多說(shuō)了。我們現(xiàn)在就開(kāi)始。
我們以一個(gè)例子來(lái)說(shuō)明,這個(gè)例子是我用來(lái)跑dos以及我自己的小操作系統(tǒng)的。下面就是我們要用到的最基本的選項(xiàng):
# 在一行的最前面加上“#”表示這一行是注釋行。
# 內(nèi)存,以MB為單位,對(duì)于dos來(lái)說(shuō)最大可以訪問(wèn)16MB
# 的內(nèi)存,所以我就給了他16MB,你可以根據(jù)自己的機(jī)器來(lái)調(diào)整
megs: 16
# 下面兩句一般是不可以改的,至于干什么用的就不用我說(shuō)
# 了。從他們的文件名就可以看出來(lái)。
romimage: file=../BIOS-Bochs-latest, address=0xf0000
vgaromimage: file=../VGABIOS-lgpl-latest
# 這個(gè)還用說(shuō)嗎?當(dāng)然是軟驅(qū)了,我想我們寫(xiě)操作系統(tǒng)肯定是先
# 把操作系統(tǒng)放在軟盤(pán)(或映像)里面吧?在Bochs里面是可
# 以使用任意大小的軟驅(qū)映像的。可以是1.44或2.88,我一般使
# 用2.88。還有就是Bochs里面可以使用兩個(gè)軟驅(qū)。不過(guò)好像
# 我們并不經(jīng)常這樣做。
floppya: 2_88=test.img, status=inserted
#floppyb: 1_44=floppyb.img, status=inserted
# 下面是硬盤(pán),很簡(jiǎn)單,還有就是Bochs也是可以支持多個(gè)硬
# 盤(pán)的。那么,硬盤(pán)文件是怎么生成的呢?我們可以發(fā)現(xiàn)硬盤(pán)是
# img格式的。你注意沒(méi)有在Bochs文件夾里有一個(gè)工具叫
# bximage.exe,我想你應(yīng)該猜出來(lái)了。他就是用來(lái)生成這個(gè)硬盤(pán)
# 文件的工具。我在這兒還想說(shuō)的是硬盤(pán)分三種格式的,最好選
#用growing類型。這種有一個(gè)好處就是節(jié)省硬盤(pán)空間,不過(guò)使用
#這種類型的硬盤(pán)還需要在下面加上mode = growing這個(gè)選項(xiàng)。
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master: type=disk, path="dos.img", cylinders=306, heads=4, spt=17
# 下面這個(gè)就是光驅(qū),沒(méi)什么好說(shuō)的。如果你想使用物理光驅(qū),
# 只要讓path=E:(我們假設(shè)E盤(pán)是光驅(qū))
ata0-slave: type=cdrom, path="dos.iso", status=inserted
# 這個(gè)是啟動(dòng)設(shè)備,可以使用cdrom(光驅(qū))、c(硬盤(pán))或floppy(軟
# 驅(qū))。
#boot: cdrom
boot: c
#boot: floppy
# 這一句可以不要,他只是指定用來(lái)保存日志的文件。如果不指定的
# 話他就會(huì)輸出到命令控制臺(tái)上。
log: Bochsout.txt
# 這一句是設(shè)置在開(kāi)機(jī)時(shí)是否激活鼠標(biāo),Bochs對(duì)于鼠標(biāo)的控制不是# 很好。建議如果不是特別需要的話不要激活他。在運(yùn)行期間也可以點(diǎn)窗口右上角的鼠標(biāo)圖標(biāo)來(lái)激活他。
mouse: enabled=0
以上這些設(shè)置就可以讓你的DOS或自己的小操作系統(tǒng)在Bochs里面跑起來(lái)了。至于其他的一些高級(jí)支持,你可以查看Bochsrc- sample.txt里面的說(shuō)明。不要害怕他,其實(shí)很簡(jiǎn)單。關(guān)鍵是拋棄恐懼。
二、 啟動(dòng)Bochs
配置文件已經(jīng)寫(xiě)好了,硬盤(pán)文件等也都已經(jīng)弄好了。那么我們?nèi)绾蝸?lái)啟動(dòng)Bochs呢?很簡(jiǎn)單,你右擊一下上面寫(xiě)的那個(gè)配置文件(例如 myos.bxrc,注意:擴(kuò)展名要是.bxrc。)選擇“運(yùn)行”或雙擊即可。不過(guò)我一般都不這樣做,我一般是寫(xiě)一個(gè)批處理文件。
很簡(jiǎn)單,如下所示:
cd "d:\Bochs-2.2.1\dos"
..\Bochs.exe -q -f Bochsrc.bxrc
這樣做的好處就是無(wú)論這個(gè)啟動(dòng)腳本放在哪兒都是可以使用的。那么,我們?nèi)绾芜M(jìn)入調(diào)試狀態(tài)呢?下面我們就來(lái)討論這個(gè)問(wèn)題。
三、 調(diào)試功能
新建一個(gè)批處理文件,寫(xiě)入一下內(nèi)容:
cd "d:\Bochs-2.2.1\dos"
..\Bochsdbg.exe -q -f Bochsrc.bxrc
運(yùn)行這個(gè)批處理文件,你就可以進(jìn)入調(diào)試狀態(tài)了。不過(guò)你會(huì)發(fā)現(xiàn),程序卡住了。沒(méi)有想普通運(yùn)行狀態(tài)一樣進(jìn)入你的dos操作系統(tǒng)。為什么?因?yàn)檎{(diào)試在等 待你的命令。你只有給他一個(gè)命令他才會(huì)繼續(xù)。我們輸入“c”,然后回車。是不是dos已經(jīng)可是運(yùn)行了?
如果沒(méi)有運(yùn)行說(shuō)明你輸入的窗口不對(duì),你不會(huì)把c輸入到那個(gè)沒(méi)有光標(biāo)的窗口了吧?如果真是那樣我真是服了你了。真的!但是,dos運(yùn)行起來(lái)了,如何 在返回調(diào)試狀態(tài)?很簡(jiǎn)單,按ctrl+c。什么你正在運(yùn)行的程序被結(jié)束了?誰(shuí)讓你在操作系統(tǒng)窗口中按了,我是說(shuō)在調(diào)試窗口按。至于哪個(gè)是調(diào)試窗口,哪個(gè)是 操作系統(tǒng)窗口,我就不說(shuō)了。如果你不知道你就干脆別使用Bochs了,也不要寫(xiě)什么程序了,更不要開(kāi)發(fā)什么操作系統(tǒng)了。為什么?因?yàn)槟悴豢赡艹晒Α倪@兒 就可以看出來(lái)。最好是找塊豆腐撞死,這樣你會(huì)很幸福的死去,不然你就會(huì)成為教育后代的典范——看到了嗎XXX是怎么死的,笨死的。呵呵!開(kāi)個(gè)玩笑。你真要 不知道
千萬(wàn)不要來(lái)找我,找我我也不告訴你。不好意思,我也不知道。那么,在調(diào)試狀態(tài)下我們可以干哪些事呢?你用過(guò)debug嗎?它能做的Bochs都能 做,它不能做的Bochs也可以做。下面就是一些常用的調(diào)試命令。
help
我最想告訴大家的是這個(gè)指令,因?yàn)樗梢愿嬖V我們一切。古語(yǔ)說(shuō):“授之以魚(yú),不若授之以漁”。我覺(jué)的很有道理。但是,有些人就是不想學(xué)這種一勞永 逸的方法。所以,我還要繼續(xù)寫(xiě)下去。
輸入help,回車。你會(huì)得到以下信息:
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 - 現(xiàn)實(shí)調(diào)試命令列表
help '命令' - 顯示某條命令的詳細(xì)用法。
命令分為哪些?很明顯,四類:調(diào)試控制,運(yùn)行控制,斷點(diǎn)管理,CPU和內(nèi)存控制。我不想在這兒一一介紹了。沒(méi)有必要,我只介紹一下最常用的就可以 了。
c:繼續(xù),前面我們已經(jīng)用過(guò)了。
s:?jiǎn)尾綀?zhí)行。他還有一個(gè)擴(kuò)展用法。
s n :執(zhí)行n步。
b 0x7c00:在內(nèi)存0x7c00處設(shè)置一個(gè)斷點(diǎn).當(dāng)程序執(zhí)行到0x7c00處就自動(dòng)進(jìn)入到調(diào)試狀態(tài).后面的這個(gè)數(shù)指的是內(nèi)存的線性地址
。也可以使用10進(jìn)制的數(shù),但是好像沒(méi)有人會(huì)這樣做。
x /20 0x7c00: 以16進(jìn)制的形式從內(nèi)存的0x7c00開(kāi)始顯示20個(gè)字的數(shù)據(jù)。這個(gè)是很常用的命令,但是需要注意的是他的顯示順序和16進(jìn)制編輯器中的顯示順序有一點(diǎn)小 的區(qū)別。他的顯示是以字為單位的,而且在字中是從低到高顯示的.不過(guò)也沒(méi)有什么大不了的。你只要稍微注意一下就可以了。
dump_cpu:這個(gè)是我最長(zhǎng)用的三個(gè)指令之一。他的功能是顯示現(xiàn)在的寄存器的狀態(tài),詳細(xì)內(nèi)容類似于:
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 :反匯編內(nèi)存0x7c00處,反匯編的長(zhǎng)度是20。你想不想知道dos的引導(dǎo)程序是什么樣子的?執(zhí)行一下這個(gè)命令就可以了。你還可以使用這樣的命令 u /20 cs:0x120a,至于什么意思,我也不說(shuō)了。
現(xiàn)在,我們已經(jīng)介紹了6條命令了。夠了。對(duì)于日常應(yīng)用已經(jīng)完全夠用了。如果你想了解其他命令的用法只要執(zhí)行一下help “命令名”就可以了(注意,命令上要帶有引號(hào))。好了。現(xiàn)在已經(jīng)把Bochs的基本功能介紹完了。你是不是感覺(jué)Bochs很簡(jiǎn)單?對(duì)于簡(jiǎn)單的應(yīng)用來(lái)說(shuō),確 實(shí)如此。但是,想讓他支持一些高級(jí)功能就有點(diǎn)麻煩了。畢竟它是全模擬的虛擬機(jī),所以在有些方面實(shí)現(xiàn)起來(lái)并不容易。但是,向網(wǎng)絡(luò)之類的功能還是可以支持的。 你只要看一下Bochsrc-sample.txt就知道了。我在這兒就不說(shuō)了。我還要說(shuō)的是Bochs不僅僅可以調(diào)試操作系統(tǒng),還可以調(diào)試dos下的程 序。我們知道dos沒(méi)有多少好的調(diào)試器。那么我們完全可以使用Bochs來(lái)調(diào)試。你知道在程序的開(kāi)頭輸出一下程序的段地址和偏移地址,然后暫定一下,在虛 擬機(jī)里面設(shè)置一下斷點(diǎn)就可以了。
Bochs的是可以運(yùn)行大部分的操作系統(tǒng)仿真,包括Linux,DOS或Windows里面的。 Bochs的最初是由凱文·勞頓編寫(xiě)的,目前由該項(xiàng)目的維護(hù)。
Bochs的可編譯并在多種模式,其中一些仍處于開(kāi)發(fā)階段的使用。 “典型”的使用Bochs的是提供完整的x86 PC模擬,包括x86處理器,硬件設(shè)備和內(nèi)存。這使您可以在工作站上的模擬器中運(yùn)行的操作系統(tǒng)和軟件,就像你有一臺(tái)機(jī)器一臺(tái)機(jī)器內(nèi)。例如,假設(shè)您的工作站是Unix / X11工作站,但要運(yùn)行Win'95應(yīng)用。 Bochs的將允許你你的Unix / X11工作站上運(yùn)行贏95和相關(guān)的軟件,您的工作站上顯示一個(gè)窗口,在PC上模擬監(jiān)視器。
Android的端口通過(guò)Lyubomyr麗森和馬克西姆沃洛申
由謝爾蓋·Pylypenko libSDL端口(又名pelya)
Bochs的是一個(gè)高度可移植的開(kāi)源IA-32(x86)的PC模擬器用C ++編寫(xiě),能夠在大部分常見(jiàn)的平臺(tái)上運(yùn)行。它包括對(duì)Intel x86 CPU,通用I / O設(shè)備,和一個(gè)自定義BIOS的仿真。 Bochs能夠被編譯成模擬許多不同的x86 CPU,從386年初可能甚至沒(méi)有達(dá)到市場(chǎng)還沒(méi)有最新的x86-64 Intel和AMD處理器。
http://bochs.sourceforge.net/
https://github.com/lubomyr/bochs
https://github.com/lubomyr/BochsLauncher
bochs虛擬機(jī)window7鏡像對(duì)x86硬件設(shè)備的完全模擬,所以它是一個(gè)模擬器,而vmware則是一個(gè)虛擬機(jī),它會(huì)將用戶行為完全委托給真實(shí)的硬件來(lái)完成,除了一些特定的IO需要模擬外,即使在沒(méi)有網(wǎng)絡(luò)的情況下,也能夠照常運(yùn)行。
手機(jī)軟件,是指能在手機(jī)上方便用戶的一系列軟件,具備各種各樣的功能,滿足用戶的各種需求,包括各種保護(hù)手
進(jìn)入專區(qū)>專業(yè)的游戲下載、綜合門(mén)戶網(wǎng)站
Copyright 2009-2016 www.mmd178.cn 版權(quán)所有
鄂ICP備17018784號(hào)-1
熱門(mén)評(píng)論
最新評(píng)論