bochs2.6.9配置文件详解.和相关调试到虚拟机运行

bochs2.6.9配置⽂件详解.和相关调试到虚拟机运⾏
简介:
本⽂以windows平台为例
配置⽂件
在bochs程序⽬录下新建⼀个⽂件
⽐如笔者的⽬录为: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,
#例⼦:软驱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:
#设置⿏标不可⽤ ,如果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. 在程序⽬录下建⽴⼀个:
2. 在中写上vhd⽂件路径,⽐如:D:\Program Files (x86)\Bochs-2.6.9\myvhd.vhd,不要带换⾏符和空格
3. 可以直接打开,也可以在控制台输⼊(在⽂件⽬录,或加⼊了环境变量,否则要写决定路径) vhdw bin⽂件 写⼊扇区.例
如 vhdw D:\boot.bin 0 ;在0扇区开始写⼊boot.bin⼆进制⽂件
我编译了的hello.asm在D盘
写进vhd⽂件命令(第⼀个扇区,从0开始,不要误会,这是⽂件,虽然磁盘规定扇区从1开始,0可以省略,默认是第⼀个扇区) vhdw D:\boot.bin 0
开始执⾏调试
在win7及其以上的系统,请⽤管理员权限打开bochs程序⽬录下的
如果运⾏正常的话,我们可以看到第⼀个指令是: jmpf 0xf000:e05b
我们知道,最终他会把我们的程序加载到0x7c00处执⾏
下断点:b 内存地址 (lb是在线性地址下断点,⽤法和b相同)
- 运⾏:c (直到遇到断点或错误暂停)
是不是在我们的第⼀条指令暂停了下来,好了,下⾯你可以单步跟踪了,单步跟踪指令是: - 单步步过:n
-
单步步⼊:s
s
s 10 #相当于10次 s
查看指定内存地址的汇编指令: u 开始地址 结束地址
u 0x7c00 0x7d00

本文发布于:2024-09-23 03:13:04,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/126286.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:开始   程序   地址   汇编   路径   内存   扇区   编译
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议