1. 程式人生 > >bochs2.6.9 配置檔案詳解.和相關除錯到虛擬機器執行

bochs2.6.9 配置檔案詳解.和相關除錯到虛擬機器執行

簡介:

本文以windows平臺為例

配置檔案

在bochs程式目錄下新建一個bochsrc.txt檔案
比如筆者的目錄為:D:\Program Files (x86)\Bochs-2.6.9
這裡寫圖片描述

配置檔案說明

# "#"是註釋(comment)

# 分配記憶體megs引數[megs: 128 分配128MB記憶體,最大是2048]不被贊成使用
# 使用memory替代
# guest 分配給模擬器客戶端的記憶體大小
# host  從guest分配給主機的記憶體大小,實際分配可能比guest小,如果用到了
# 更多的記憶體將會動態加入,但訪問不能大於guest記憶體大小.
# memory 沒有記憶體大小限制,限制的是CPU可訪問記憶體最大大小(即CPU地址匯流排寬度) memory: guest=256,host=128 # 配置ROM BIOS,ROM BIOS將控制計算機首次啟動的功能(BIOS的韌體) # file:ROM BIOS二進位制檔案路徑,這個引數下面不再解說 romimage: file=BIOS-bochs-latest # VGA ROM 的映象檔案 一般是被對映到記憶體地址0xC0000處,相當於我們的顯示卡 vgaromimage: file=VGABIOS-elpin-2.40 #使用軟碟機 floppy_ ,"_"可以是a,b,c,d...
#例子:軟碟機a,b 大小為1.44MB # 引數:status 有兩種分別為 # inserted(軟盤插入軟碟機),ejected(軟盤未插入軟碟機)。 floppya: 1_44=floppya.img, status=inserted floppyb: 1_44=floppyb.img, status=inserted # ata是一個介面 可以是ata0,ata1,ata2,ata3,用來控制硬碟(disk)和光碟機(cdrom) #ioaddr1 分配主盤的io埠地址 ..... #ioaddr2 分配從盤的io埠地址 ..... #irg 中斷請求號(當發生中斷時,對應的中斷向量)
#學過硬碟埠讀寫的朋友應該知道主盤對應埠(0x1f0~0x1f7) #從盤對應對口(0x3f0~0x3f7) ata0: enabled=1,ioaddr1=0x1f0, ioaddr2=0x3f0,irq=14 #ata[0-3]-master 定義裝置型別和特徵 #type 連線裝置的型別[disk(硬碟)|cdrom(光碟機)] #path 虛擬映象路徑(我用的是virtualbox虛擬機器的虛擬硬碟) #cylinders 柱面數(type為硬碟是才有這個引數) #heads 每柱面擁有的磁軌數(type為硬碟是才有這個引數) #spt 沒磁軌的扇區數量(type為硬碟是才有這個引數) ata0-master: type=disk,path=myvhd.vhd, cylinders=103, heads=12, spt=17 #設定啟動順序 1.硬碟,2.軟碟機(配置過BIOS啟動項的朋友肯定知道) boot: disk,floppy #日誌輸出 log: 日誌路徑 log: bochslog.txt #設定滑鼠不可用 ,如果enabled不為0那麼bochs會發送滑鼠事件到模擬機上 #因為是字元介面,無需滑鼠 mouse: enabled=0 #設定鍵盤 #type 鍵盤型別 #keymap 鍵盤對映檔案 keyboard: type=mf,keymap=keymaps/x11-pc-us.map

我們可以看到,所有的配置檔案我們都沒有寫絕對路徑,我們只是寫了一個名稱,比如鍵盤對映檔案keymaps/x11-pc-us.map,我們可以在bochs安裝目錄的子目錄keymaps中找到.所以我們用的是相對路徑,相對的是bochs安裝目錄路徑.

寫一段程式碼測試

好了我們來寫一個彙編程式,讓它執行,筆者用的是nasm編譯器,你也可以用其他,讓他僅生產彙編程式碼的二進位制檔案即可(即沒有任何附加程式碼,你寫什麼就是什麼,這樣才能裸機執行).
例子:hello,world

org 0x7c00 ;彙編地址從0x7c00開始
;我們知道BIOS韌體(BIOS ROM)會把我們的程式載入到0x7c00實體地址處開始執行.

mov ax,0xb800  ;視訊記憶體段地址
mov ds,ax

xor bx,bx
mov byte [bx],'h'  ;字元
inc bx
mov byte [bx],2   ;字元屬性
inc bx
mov byte [bx],'e'  ;字元
inc bx
mov byte [bx],2   ;字元屬性
inc bx
mov byte [bx],'l'  ;字元
inc bx
mov byte [bx],2   ;字元屬性
inc bx
mov byte [bx],'l'  ;字元
inc bx
mov byte [bx],2   ;字元屬性
inc bx
mov byte [bx],'o'  ;字元
inc bx
mov byte [bx],2   ;字元屬性
inc bx
mov byte [bx],','  ;字元
inc bx
mov byte [bx],2   ;字元屬性
inc bx

mov byte [bx],'w'  ;字元
inc bx
mov byte [bx],2   ;字元屬性
inc bx
mov byte [bx],'o'  ;字元
inc bx
mov byte [bx],2   ;字元屬性
inc bx
mov byte [bx],'r'  ;字元
inc bx
mov byte [bx],2   ;字元屬性
inc bx
mov byte [bx],'d'  ;字元
inc bx
mov byte [bx],2   ;字元屬性
; $當前彙編地址
jmp $

; $$ 開始彙編地址 ,為了確保512位元組對齊
; 因為我們要寫入主引導扇區才能執行
;主引導扇區最後兩個字元為0x55,0xaa
;times 重複多少次 比如:times 10 db 1 ;重複10次 db 1
times  510-($-$$) db 0
db 0x55,0xaa

開始編譯

控制下執行編譯,編譯命令如下:

nasm -f bin hello.asm -o boot.bin

  • -f(format)即編譯格式,選擇純二進位制bin,這樣才不會寫進其他程式碼
  • hello.asm 我們要編譯的彙編程式碼檔案,這是相對路徑,如果提示找不到檔案請用絕對路徑
  • -o 輸出檔案路徑

寫進vhd虛擬磁碟

我用C語言寫了一個vhd寫入二進位制檔案內容的控制檯程式,筆者也可以自己寫一個,非常簡單,由於篇幅關係,我把原始碼上傳,就不貼出來了.

這個工具名稱是vhdw

;工具使用說明

  1. 在程式目錄下建立一個:config.txt
  2. 在config.txt中寫上vhd檔案路徑,比如:D:\Program Files (x86)\Bochs-2.6.9\myvhd.vhd,不要帶換行符和空格
  3. 可以直接開啟vhdw.exe,也可以在控制檯輸入(在vhdw.exe檔案目錄,或加入了環境變數,否則要寫決定路徑) vhdw bin檔案 寫入扇區.例如 vhdw D:\boot.bin 0 ;在0扇區開始寫入boot.bin二進位制檔案

我編譯了的hello.asm在D盤
這裡寫圖片描述

寫進vhd檔案命令(第一個扇區,從0開始,不要誤會,這是檔案,雖然磁碟規定扇區從1開始,0可以省略,預設是第一個扇區)

vhdw D:\boot.bin 0

開始執行除錯

在win7及其以上的系統,請用管理員許可權開啟bochs程式目錄下的bochsdbg.exe

如果執行正常的話,我們可以看到第一個指令是: jmpf 0xf000:e05b

我們知道,最終他會把我們的程式載入到0x7c00處執行

  • 下斷點:b 記憶體地址 (lb是線上性地址下斷點,用法和b相同)

這裡寫圖片描述
- 執行:c (直到遇到斷點或錯誤暫停)
這裡寫圖片描述
是不是在我們的第一條指令暫停了下來,好了,下面你可以單步跟蹤了,單步跟蹤指令是:
- 單步步過:n
- 單步步入:s

s
s 10 #相當於10次 s
這裡寫圖片描述

  • 檢視指定記憶體地址的彙編指令: u 開始地址 結束地址

    u 0x7c00 0x7d00


這裡寫圖片描述

最後執行結果:

![這裡寫圖片描述](https://img-blog.csdn.net/20180215173659815?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hwcmFpbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

其他一些除錯指令

  • 顯示指定記憶體地址的資料 x檢視線性地址,xp 檢視實體地址
    格式: x(p)/nuf addr
    • n 資料長度
    • u 資料單元大小 b(1),h(2),w(4),g(8).後面的數字表示位元組
      • b BYTE
      • h WORD(我也不知為啥用h)
      • w DWORD
      • g DWORD64
    • f 資料顯示格式:x d u o t c
      • x 十六進位制
      • d 十進位制
      • u 無符號十進位制
      • o 八進位制
      • t 二進位制
      • c 按照字元顯示

以16進位制從0x7c00顯示16個位元組資料

x /16bx 0x7c00

  • 檢視資訊指令:info
    • info b 顯示所有斷點狀態
    • info cpu 檢視全部cpu暫存器資訊
    • info idt 檢視保護模式中斷向量描述表
    • info ivt 檢視真實模式下的中斷向量表
    • info gdt檢視全域性描述符表
    • info tss 檢視當前任務狀態段
    • info flags 檢視標誌暫存器內容
  • 已經不可在bochs2.6.9用的info指令

    • info program 檢視程式的執行狀態 (無法使用!)
    • info r|reg|rigisters 檢視暫存器內容(無法使用!)
    • info cr 檢視CR0-CR4暫存器狀態 (無法使用)
  • 暫存器檢視

    • r 檢視通用暫存器
    • cr 檢視CR控制暫存器
    • sreg 檢視段暫存器
    • creg 檢視控制暫存器
    • dreg 檢視除錯暫存器

在virtualBox虛擬機器上執行

在virtual執行也是可以的只要把檔案寫進建立好虛擬機器的vhd磁碟就好了,我直接貼圖了.(記得建立磁碟的時候選vhd並且要選固定大小,作業系統就選不知道不知道,因為我們自己寫的嘛).

這裡寫圖片描述

相關推薦

bochs2.6.9 配置檔案.相關除錯虛擬機器執行

簡介: 本文以windows平臺為例 配置檔案 在bochs程式目錄下新建一個bochsrc.txt檔案 比如筆者的目錄為:D:\Program Files (x86)\Bochs-2.6.9 配置檔案說明 # "#"是註釋

kickstart配置檔案system-config-kickstart

kickstart是什麼        許多系統管理員寧願使用自動化的安裝方法來安裝紅帽企業 Linux.為了滿足這種需要,紅帽建立了kickstart安裝方法.使用kickstart,系統管理員可以建立一個檔案,這個檔案包含了在典型的安裝過程中所遇 到的問題的答案.   

Nginx實戰之1.1-1.6 Nginx介紹,安裝及配置檔案

1.1 Nginx介紹 HTTP協議發展簡史 加粗  https://coding.net/u/aminglinux/p/nginx/git/blob/master/http/version.md  1991年釋出0.9版,只有GET方法,僅支援html,一個連線一個請求 &n

Spring boot 配置檔案 (properties yml )

從其他框架來看 我們都有自己的配置檔案, hibernate有hbm,mybatis 有properties, 同樣, Spring boot 也有全域性配置檔案。 Springboot使用一個全域性的配置檔案,而且配置檔案的名字是固定的。 有兩種 application.properties

MyBatis的體系結構配置檔案

一、SqlSessionFactory MyBatis 的應用都是以一個 SqlSessionFactory 的例項為中心的,它是單個數據庫對映關係經過編譯後的記憶體映象;SqlSessionFactory 的例項可以通過 SqlSessionFactoryBuilder 獲得。而 SqlSes

Spring Boot配置檔案-ConfigurationPropertiesValue優缺點-(轉)好文

文章轉自 http://www.cnblogs.com/itdragon/p/8686554.html Spring Boot提供了兩種常用的配置檔案,分別是properties檔案和yml檔案。他們的作用都是修改Spring Boot自動配置的預設值。相對於properties檔案而言,yml檔

配置檔案:PropertiesYAML

一.配置檔案的生效順序,會對值進行覆蓋: 1. @TestPropertySource 註解 2. 命令列引數 3. Java系統屬性(System.getProperties()) 4. 作業系統環境變數 5. 只有在random.*裡包含的屬性會產生一個Rand

SpringMVC配置檔案:<context:annotation-config/><context:component-scan base-package=""/><mvc:annotation-driven /> Spring配置

原文地址:https://www.cnblogs.com/lcngu/p/5080702.html Spring配置檔案詳解:<context:annotation-config/>和<context:component-scan base-package=""/>和<mvc:

Hibernate之對映檔案配置檔案

一、對映配置檔案(xxx.hbm.xml) <hibernate-mapping> <!-- 配置表與實體對映關係 --> <class name="com.mark.domain.Customer" table="cst_customer"&

maven安裝eclipse整合以及Maven之setting.xml配置檔案

由於maven需要JDK的支援,所以在安裝maven之前請確保電腦上已經安裝了JDK,且配置好了環境變數,具體的JDK的安裝及配置可自行百度。下面進入安裝 一、maven安裝 前面已經下載了相應版本的maven,且已經配置好JDK的環境;     1

Ubuntu下HBase資料庫的安裝配置檔案

1.從http://www.apache.org/dyn/closer.cgi/hbase/下載穩定版安裝包,我下的是hbase-1.2.6-bin.tar.gz 2.解壓放在/usr/local的目錄下 3.修改許可權sudo chown -R luanpeng hbase-1.2.6/ 4.修改資料

Spring Boot基礎3-配置檔案:PropertiesYAML

一.配置檔案的生效順序,會對值進行覆蓋: 1. @TestPropertySource 註解 2. 命令列引數 3. Java系統屬性(System.getProperties())

RabbitMQ 配置檔案(生產者消費者)

一、rabbitmq 配置檔案 在web 專案開發過程中,一般分為生產者配置檔案和消費者配置檔案。廢話少說,馬上教您整個流程的配置! 1、準備工作:安裝好rabbitmq,並在專案中增加配置檔案   rabbit.properties 內容如下: rmq.ip=192.1

部署storm配置檔案

#########安裝storm######## storm_install.sh sudo ansible -i ansible_hosts elk -m copy -a "src=/letv/apache-storm-1.1.0.tar.gz dest=/l

SSH2框架搭建 配置檔案

SSH框架,當今最為流行的專案開發框架組合,那麼掌握他的第一步是學習如何配置環境,java Web開發的無論哪種框架都離不開各種xml配置,雖然說配置在網上到處都有,但是要成為合格的程式猿,必須要明白配置中每一部分的意義,分析它的規律,因此這一步至關重要。 SS

rsync搭建部署配置檔案

Rsync是一種快速並且非常通用的檔案複製工具,它以delta-transfer演算法聞名,通過僅傳送原始檔和目的地中現有檔案之間的差異來減少在網路上傳送的資料量。RSyc廣泛用於備份和映象,並作為日常使用的複製命令。環境:Centos 7 [[email prot

Log4j的日誌輸出級別配置檔案

一,Log4j的日誌輸出級別     Log4j由三個重要的元件構成:日誌資訊的優先順序,日誌資訊的輸出目的地,日誌資訊的輸出格式。日誌資訊的優先順序從高到低有ERROR、WARN、 INFO、DEBUG,分別用來指定這條日誌資訊的重要程度;日誌資訊的輸出目的地指定了日誌將

redis lru緩存清理算法相關配置

rand add 就是 即使 oev ima 最大的 進行 時間比較 首先,需要先配置redis的conf文件,涉及到lru相關的配置一共有三個分別是:maxmemory,設置redis用來存放數據的最大的內存大小,一旦超出這個內存大小之後,就會立即使用LRU算法清理掉部分

三大框架(ssh)學習——配置檔案(一)

配置檔案詳解 指定web應用預設字符集 <constant name="struts.i18n.encoding" value="gbk" /> 此配置相當於: request.setCharacterEncoding(“gbk”); r

三大框架(ssh)學習——配置檔案(二)

多配置檔案實現 專案經常需要多人協作開發,但是如果大家都是用同一個struts.xml檔案,會互相影響不利於開發的正常開展。這樣,我們可以通過<include>元素指定多個配置檔案。 可以在src下面建立多個struts配置檔案。然後再struts.xml中分別引入: str