Windows下Bochs的简单使用

article/2025/10/21 12:18:28

Bochs的安装

安装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。


http://chatgpt.dhexx.cn/article/N5wiovw8.shtml

相关文章

gettimeofday/clock_gettime

我们写程序的时候经常会使用计时函数,比如RPC中计算超时时间,日志中打印当前时间,性能profile中计算某个函数的执行时间等。在使用时间函数的时候,我们一般默认认为时间函数本身的性能是很高的,对主逻辑的影响可以忽略…

gettimeofday 函数

使用C语言编写程序需要获得当前精确时间&#xff08;1970年1月1日到现在的时间&#xff09;&#xff0c;或者为执行计时&#xff0c;可以使用gettimeofday()函数。 库为 #include <sys/time.h> 函数原型 int gettimeofday(struct timeval*tv, struct timezone *tz); …

clock_gettime 函数笔记

函数"clock_gettime"是基于Linux C语言的时间函数,他可以用于计算精度和纳秒。 #include<time.h> int clock_gettime(clockid_t clk_id,struct timespec *tp); clk_id : 检索和设置的clk_id指定的时钟时间。 CLOCK_REALTIME:系统实时时间,随系统实时时间改变…

date.gettime()与时间的获取

date.gettime()返回的是什么&#xff1f; java.util.Date ----------- date.getTime()返回的是什么&#xff1f; 问题&#xff1a; ------------- Date date new Date(); System.out.println(date.getTime()); 输出结果是1210745780625 编译时间当时时间大概是2008年5…

Linux下clock_gettime函数详解

要包含这头文件<time.h> 且在编译链接时需加上 -lrt ;因为在librt中实现了clock_gettime函数。 --- struct timespec ts; clock_gettime(CLOCK_MONOTONIC,ts); printf("%d %d",ts.tv_sec, ts.tv_nsec);打印出来的时间跟 cat /proc/uptime第一个参数一样 /proc/…

Gettimeofday的用法

先看gettimeofday的语法定义&#xff1a; 使用前先包含头文件#include<sys/time.h> 第一个参数&#xff1a;是个timeval *类型的结构体&#xff0c;该结构体如下 timeval.tv_sec 就是秒呗 timeval.tv_usec 就是微秒 一般我们使用gettimeofday是用来…

Java中Date类中getTime()方法

public long getTime() 返回自1970年1月1日以来&#xff0c;由 Date对象表示的00:00:00 GMT的毫秒 数 。 结果 自1970年1月1日以来&#xff0c;以此日期为准的00:00:00 GMT的毫秒数。 这是JDK文档中对于getTime()方法的官方解读 在我实际使用中发现这个方法可以解决日期月日输…

PPT插入视频

最近需要在PPT中插入一段视频&#xff0c;但是发现在插入的时候并不是一帆风顺&#xff0c;所以在这里做一下记录。 1、可能出现如下的提示 2、解决的办法 在OFFICE2010中插入视屏和音频文件时, 注意应确认是微软的格式, 即wmv及wma格式, 否则即使插入后, 在插入时也可能出现…

怎么将PPT中的视频文件保存下来

先右键包含视频的PPT文件&#xff0c;选择‘打开方式’&#xff0c;打开方式的子菜单栏中有一个选择其他应用。 因为我之前操作过&#xff0c;所以会显示那个WinRAR的应用程序&#xff0c;第一个使用的话一般不会出现&#xff0c;点击‘更多应用’&#xff0c;找到‘在这台电脑…

如何在PPT中自动同时播放两个视频

嵌入视频 视频工具中选择自动播放 动画中第二个视频选择和上一动画同时

从视频中提取图片(截取ppt)

从视频中提取图片 大聪明2.0上线 本文将介绍如何快速从网课视频中提取ppt Step1 从视频中提取图片 使用win自带的“电影与电视” 点击这个小铅笔&#xff0c;选择“保存视频中的照片” 在弹出的新窗口内就可以将视频按一帧一帧的照片展示出来&#xff0c;对想要保存的照片点击…

PPt插入视频同时播放

1.导入需要的三个视频 2.对每个视频在 动画 里面设置为 播放 3.选择第一个视频的 4.其他的视频设置为

wps——ppt中的视频提取

在写小丸工具箱时我已经删除了自己录的视频&#xff0c;只有ppt中有存稿&#xff0c;在查阅后成功的提取视频文件。这里要骂骂骂wps没有媒体视频另存为的选项要不然也不需要在ppt外部进行处理。&#xff08;如果是我没有找到&#xff0c;那烦请提醒我这个选项在那里&#xff0c…

如何使用计算机讲解ppt,如何录制PPT讲解视频?

录制PPT视频方式推荐 如何在电脑上录制PPT视频&#xff1f;本文介绍了三种方案&#xff0c;让你轻松将幻灯片录制为视频。 Microsoft PowerPoint 微软Office自带录制幻灯片功能&#xff0c;需要注意的是Office 2007版本没有此功能&#xff0c;可以先升级到高版本的Office&#…

PPT幻灯片放映时不显示视频(旁白)

问题&#xff1a;PPT录制的视频在非放映的时候可以播放&#xff0c;但是进入幻灯片放映模式就不显示。 解决方法&#xff1a;幻灯片放映 → \rightarrow → 播放旁白 勾选上。

PPT制作相册视频

目标&#xff1a;使用免费工具将图片快速转为视频&#xff0c;实现视频上传抖音、微视频。 工具 PowerPoint 2019等新版本格式工厂 PPT制作 制作一个自动播放的PPT 打开PPT插入相册&#xff1a;插入->相册。插入照片用于制作电子相册动画设置&#xff1a;设置单页PPT内不…

PPT录制视频的方法有哪些?分享5种亲测好用的方法

PPT文稿可以通过图文或者动画的形式&#xff0c;直观形象地把内容展现给观众&#xff0c;从而给观众留下深刻的印象。比如老师讲课时会用到PPT&#xff0c;公司开会时也会用到PPT。除了需要使用到PPT文稿之外&#xff0c;有时还要对它进行录制。 那你知道PPT录制视频的方法有哪…

计算机课怎样制作ppt 课件,如何制作PPT课件视频

由于计算机的大量普及和多媒体技术的发展&#xff0c;使用多媒体上课已经是一种常见的事。我们在课堂和线上学习时&#xff0c;经常可以看到老师制作的相关知识的PPT课件。虽然我们都知道PPT课件是由PPT制作的幻灯片&#xff0c;可还是比较好奇老师是如何把一段完整PPT课件视频…

PPT 录制视频

有时候&#xff0c;需要使用PPT录制视频&#xff0c;比如在线学术会议需要上传录制好的video。具体如何操作呢&#xff1f; 选择 幻灯片放映 --> 录制幻灯片演示 --> 从头开始录制 这样录制结束后&#xff0c;每一页会多了一个音频&#xff0c;这就是录入的 旁白。 选择…

【从ppt里导出视频的方法】

找到ppt文件 在查看里显示后缀 Win xp&#xff1a;https://jingyan.baidu.com/article/2a1383285f0bd4464b134f56.html Win7&#xff1a;https://jingyan.baidu.com/article/8ebacdf005661108f65cd5b7.html Win8&#xff1a;https://jingyan.baidu.com/article/6d704a132cd46d6…