Bochs的安装

安装Bochs后,安装目录如下:

可以用到的东西分为两大类:

应用程序

先说一下bochs.exe、以及bochdbg.exe前者直接运行虚拟机,后者可以从头开始调试。
然后就是bximage.exe,这是一个专门用于生成软盘或者磁盘镜像的软件,并且可以对镜像的参数进行调整。
其余都不常用。

各种资源文件

在用于配置虚拟机,告诉Bochs要运行的虚拟机是什么样的:

  • BIOS系统镜像,在上图,镜像有BIOS-bochs-latest和BIOS-bochs-legency。
  • VGABIOS镜像,是提供屏幕显示接口,例如10h中断,在上图,VGABIOS开头的文件就是。
  • 键盘映射,在keymaps文件夹中。

Bochs的使用

除了Bochs的应用程序之外,还需要两个先决条件:

  • 需要有虚拟机镜像,以虚拟磁盘或者虚拟软盘的形式存储。
  • 需要有配置文件。

虚拟机镜像

虚拟机镜像有很多种格式,一般没有太过特殊的要求就直接使用flat格式。下面使用bximage生成一张磁盘镜像:

在Windows中,双击应用程序就会显示出一个命令行:

我们要创建一个镜像,所以选择1,然后就是问要创建软盘还是硬盘:

hd即HardDisk,就是磁盘,fd即FloopyDisk,就是软盘,这里选hd,然后就是问要创建何种格式的镜像:

相对于其他镜像,flat格式的内容可以直接用WinHex之类的软件打开查看,排查起来相对简单,所以直接选flat格式,下一个问题是设置大小:

对于初学操作系统的我来说,大的尺寸没有太大的意义,所以直接选个最小好了,最后一个问题是文件名,设置好后如下图:

上面的图中,最重要的是镜像的CHS参数,这里把它记下来,后面要用的。
这只是一张空白的磁盘镜像,没有任何内容,在做好系统后,可以使用dd直接将系统拷到镜像中去,这里假设我有一个512B的引导扇区文件boot.bin,命令如下:

dd if=./boot.bin of=mydisk.img bs=512 count=1 conv=notrunc

if指定输入文件,of指定输出文件,bs为块的大小,count指定拷贝多少块,注意要加上conv=notrunc,当boot.bin的大小小于mydisk.img的时候,此项可以避免dd将mydisk.img截短为boot.bin的大小。

至此,虚拟机镜像准备完毕。

配置文件

Bochs的安装目录下有配置文件的示例bochsrc-sample.txt。这里讲一个简单的示例,井号开头的是单行注释:

# 指定虚拟机的内存大小为32M
megs:32# 指定虚拟机的BIOS镜像
romimage: file=BIOS-bochs-latest
vgaromimage: file=VGABIOS-lgpl-latest# 告诉Bochs,该虚拟机加载了一个叫做mydisk.img的硬盘镜像作为主盘,ata1为副盘
# 第二行的CHS参数就填刚刚记下来的参数
ata0: enabled=1,ioaddr1=0x1f0,ioaddr2=0x3f0,irq=14
ata0-master:type=disk,path=mydisk.img,mode=flat,cylinders=20,heads=16,spt=63
# 从硬盘启动
boot:disk# 指定日志文件,里面有各种运行时信息
log: bochsout.txt# 不使用鼠标
mouse: enabled=0# 指定键盘映射
keyboard: keymap=x11-pc-us.map

这里笔者没有搞明白的是,使用绝对路径配置BIOS镜像和键盘映射文件的时候,bochs似乎没有办法读取相应的文件,最后笔者是将需要读取的文件拷贝到配置文件的目录中,这样就不需要使用绝对路径了。

运行虚拟机

双击bochsdbg.exe弹出两个框:


前面用来载入配置文件,后面就是运行时的控制台。点击Load载入配置文件,让后点击Start如图:

原来的小框不见了,新增了一个黑框,作为虚拟机的屏幕。此时虚拟机停留在执行BIOS镜像的第一条指令之前。

Bochs调试的命令跟GDB很像,后面列出常用的调试命令。

这里我们只需要从引导扇区开始调试即可,命令如下:

b 0x7C00
c

虚拟机就会停留在引导扇区的第一条指令上,然后就可以愉快的调试了。

Bochs常用命令

b addr 在物理地址处设置断点 addr为物理内存地址,不加段基址

lb 在线性地址处设置断点 addr为线性物理地址,不加基址

vb 在虚拟地址上设置断点 addr为段基址:偏移地址, cs段

c 继续执行知道遇到断点

n 单步执行 跳过子程序和int中断程序

s 单步执行

s num ( s指令后加一数字) 执行n步

dump_cpu 查看寄存器信息 (实测下来这个指令好像不好使。。。)

x /nuf addr 显示指定内存地址的数据,addr可以是线性的内存地址,也可以是虚址 格式是基址:偏移或者基址寄存器:偏移

n 显示的数据长度

u 数据单元大小 b,h,w,g分别对应1,2,4,8字节

f 数据显示格式 x,d,u,o,t,c分别对应十六进制、十进制、无符号十进制、八进制、二进制、字符串

u [/count] start end 反汇编一段线性内存(作用与上面的一样)

(count 参数指明要反汇编的指令条数 ,例子:u /5 --反汇编从当前地址开始的5条指令)

info指令组

info b 展示当前的断点状态信息

info dirty 展示自从上次显示以来物理内存中的脏页(被写的页)

info program 展示程序的执行状态 (无法使用!)

info r|reg|rigisters 展示寄存器内容

info cpu 展示CPU寄存器内容

info fpu 展示FPU寄存器的状态

info idt 展示中断描述表

info ivt 展示中断向量表(保护模式下无效)

info gdt 展示全局描述表

info tss 展示当前的任务状态段

info cr 展示CR0-CR4寄存器状态 (无法使用)

info flags 展示标志寄存器 (无法使用)

寄存器查询

r 查看通用寄存器

sreg 查看段寄存器(es,cs,gs,ss,fs,ds以及idt,gdt,ldt,tr)

creg 查看控制寄存器(cr0,cr1,cr2,cr3)

dreg 查看调试寄存器(dr0-dr7)

x /nuf [addr] 显示线性地址(Linear Address)的内容

xp /nuf [addr] 显示物理地址(Physical Address)的内容

参数 n 显示的单元数

参数 u 每个显示单元的大小,u可以是下列之一:

b BYTE
h WORD
w DWORD
g DWORD64

注意: 这种命名法是按照GDB习惯的,而并不是按照intel的规范。

f 显示格式,f可以是下列之一:

x 按照十六进制显示
d 十进制显示
u 按照无符号十进制显示
o 按照八进制显示
t 按照二进制显示
c 按照字符显示

n、f、u是可选参数,如果不指定,则u默认是w,f 默认是x。如果前面使用过x或

者xp命令,会按照上一次的x或者xp命令所使用的值。n默认为1。addr 也是一个

可选参数,如果不指定,addr是0,如过前面使用过x或者xp命令,指定了n=i,

则再次执行时n默认为i+1。

Windows下Bochs的简单使用相关推荐

  1. 从Docker在Linux和Windows下的区别简单理解Docker的层次结构

    上篇文章我们成功在Windows下安装了Docker,输出了一个简单的Hello World程序.本文中我们将利用Docker已有的云端镜像training/webapp来发布一个简单Python的W ...

  2. 在 windows 下安装和简单配置 trac 0.12

    赖勇浩(http://laiyonghao.com) Trac是一个基于Web的,轻量级的项目管理工具,它使用python语言编写,官网:http://trac.edgewall.org/.它集成了增 ...

  3. windows下nginx的简单使用

    在网上是可以查得到关于nginx的一些使用,每次要用的时候都会去查一下别人的用法.既然自己用到的频率会比较高,那何不自己做个小小的笔记呢. 我使用的是windows版nginx-1.14.0,版本对命 ...

  4. Windows下Cmake的简单使用

    一.安装Cmake 官网:https://cmake.org/ 本文以Windows64为例 二.项目目录如下: 1.新建demo文件夹 2.在demo文件夹下新建bin文件夹.HelloWorld. ...

  5. Windows下QT界面简单提供电子时间表

    需要的头文件 #include <QDateTime> #include <QTimer> 绑定定时器,每秒刷新一次,即设定的时间精度单位为秒 timer.start(1000 ...

  6. 记录Ubuntu Windows下安装PyV8

    2019独角兽企业重金招聘Python工程师标准>>> 2016.5.16更新: 提供PyV8 for python2.7 的window安装包网盘下载 这几天需要在使用PyV8来进 ...

  7. ImageMagick windows下的安装和gif动图制作

    一.什么是Imagemagick? ImageMagick是一款免费开源跨平台的图片编辑软件,支持 Linux,Windows,Mac OS X,iOS和Android.既可以通过命令行使用,也可以通 ...

  8. Windows下安装Redis教程

    下载 下载地址: windows版本: https://github.com/MSOpenTech/redis/releases Linux版本: 官网下载: http://www.redis.cn/ ...

  9. windows下安装不同版本Python教程

    前言 博主也是很长一段时间没有更新文章了吧,因为最近都在忙着升级我的API管理系统,还有准备会考,时隔大概一个月,我带来了本次文章,如何在windows系统下安装多个版本Python,且各版本Pyth ...

最新文章

  1. 原创经验:微信小程序开发总结
  2. NDuiker项目第2天总结
  3. Python的time库的一些简单函数以及用法
  4. 好看的按钮组件_这个发光的外骨骼盔甲是什么?为什么它如此好看!
  5. iOS - 打电话, 发短信
  6. 粉丝提问:有没有人会做彩虹表
  7. C语言的应用领域及其重要性
  8. 指针用完了怎么办_墙体里水管漏水怎么办?瞧瞧这个,轻松搞定,滴水不漏
  9. php formdata 多个图片保存_图片上传姿势以及你不知道的Typed Arrays
  10. 什么是Web Service
  11. 区块链开发中的9大应用场景
  12. Mybitis框架2016年1月3日
  13. 电大c 语言程序设计程序,中央电大 C语言程序设计A
  14. Arcgis Server开发使用query报错
  15. 使用prometheus+grafana监控k8s集群
  16. 通信原理-确定信号分析
  17. Unity 场景切换间的内存清理
  18. 公安网络及计算机信息系统安全,违反公安网络和信息安全保密工作规定及公安机关有关公安网络、计算机和信息应用系..._考试资料网...
  19. 使用Guardium离群值检测来检测隐藏的威胁
  20. 读书笔记 - 我读《财务自由之路》 - 博多 舍费尔 / 你真正想要的是什么

热门文章

  1. 【NLP】中文分词:原理及分词算法
  2. graphql入门使用-查询
  3. Trap命令使用说明
  4. iOS开发 - App语言国际化
  5. 02 Ajax表单提交
  6. 敏涵控股集团董事长刘敏:唱响敏涵之歌 打造世界敏涵
  7. 服务器安全证书未生效怎么办,win7打开网页提示“该服务器的安全证书尚未生效...
  8. ARM平台安装oracle时出现错误:runinstaller: line 97 /db/database/install/.oui: cannot execute binary file
  9. 如何设置html的背景效果,背景图片的透明度如何设置(CSS)
  10. 图构建:领域本体设计原则与动态本体