一、Bochs简介

1、Bochs简介

Bochs是一款X86硬件平台的开源模拟器。VMware、Virtual PC、VirtualBox等虚拟机软件采用虚拟化技术,部分指令直接交给硬件执行,而Bochs模拟器完全靠软件模拟来实现,从启动到重启,包括PC外设键盘、鼠标、VGA卡、磁盘、网卡等全部由软件来模拟,因此Bochs模拟器非常适合开发操作系统,其自带bochsdbg调试器使得调试操作系统非常容易。

2、Bochs源码安装

下载2.6.8版本源码:

Bochs x86 PC emulator download | SourceForge.net

编译配置:

configure --enable-debugger --enable-disasm --enable-debugger-gui

编译:

make -j

安装:

make install

3、Bochs启动方式

Bochs模拟器启动时需要加载配置文件,可以通过-f显示指定配置文件,也可以隐式从当前目录加载配置文件。

显示加载:

bochs -f bochsrc_file

隐式默认加载配置文件:

bochs -f .bochsrcbochs -f bochsrcbochs -f bochsrc.txt

4、Bochs配置 

####################################################
# Bochs的配置文件
# Configuration file for Bochs
##################################################### how much memory the emulated machine will have
megs: 32# filenameof ROM images
romimage:file=/usr/local/share/bochs/BIOS-bochs-latest
vgaromimage:file=/usr/local/share/bochs/VGABIOS-lgpl-latest# which disk image will be used
floppya:1_44=hello.img, status=inserted# choose the boot disk 确定启动方式
boot: floppy# where do we send log messages?
log: bochsout.txt# disable the mouse
mouse: enabled=0# enable key mapping ,using US layout as default
keyboard:keymap=/usr/local/share/bochs/keymaps/x11-pc-us.map

megs: 32,指定内存大小,单位MB

romimage:file=/usr/local/share/bochs/BIOS-bochs-latest,指定系统BIOS文件

vgaromimage:file=/usr/local/share/bochs/VGABIOS-lgpl-latest,指定显卡BIOS文件

floppya: 1_44=hello.img, status=inserted,指定软驱映像
boot: floppy,指定启动方式,如floppy、cdrom、c

二、Bochs调试器

1、Bochs调试器简介

Bochs调试器需要在编译Bochs时支持,Bochs调试器支持设置断点、单步执行指令等其它GDB调试器支持的功能,--enable-debugger选项调试器支持,

--enable-debugger-gui选项调试器GUI支持。

configure --enable-debugger --enable-debugger-gui

2、执行控制

continue:继续执行,简写c

step [count]:执行count条指令,如果不指定参数,默认为1,step可以简写为s。

step [cpu] [count]:在cpu上执行count条指令,count默认值为1,step可以简写为s。

step all [count]:在所有cpu上都执行count条指令,count默认值为1。

Ctrl-C:停止执行,返回到命令行提示符

Ctrl-D:如果在空行上执行,则退出调试器

quit,exit:退出调试器,继续执行。quit可以简写为q。

3、断点

vbreak seg:off:设置虚拟地址指令断点,vbreak可以简写为vb。

lbreak addr:在线性地址指令上设置断点,lbreak可以简写为lb。

pbreak [*] addr:在物理地址上设置断点,pbreak可以简写为pb,*符号是兼容GDB命令,为可选参数。

break [*] addr:设置断点,break可以简写为b

info break:显示当前所有断点状态

bpe n:开启断点

bpd n:关闭断点

delete n:删除断点,delete可以简写为del,d

4、数据断点

watch read addr:在物理地址addr上插入读观察点

watch write addr:在物理地址addr上插入写观察点

watch:显示当前内存观察点的显示状态

watch stop:当遇到观察点时,停止模拟执行(默认)

watch continue:在遇到观察点时,不要停止模拟执行

unwatch addr:移除指定物理地址上的观察点

unwatch:移除所有的观察点

trace-mem on/off:开启/关闭内存访问追踪

5、内存操作

x /nuf addr:在线性地址addr处检查内存内容

xp /nuf addr:在物理地址 addr处查看内存内容

n:指定要显示的内存单元的数量。

u:显示的内存单元的大小,b为单字,h为半字,w为字,g为双字。

f:打印的格式,x为十六进制打印,d为十进制打印,o为八进制打印,t为二进制打印,u为无符号十进制打印。

setpmem addr datasize val:在内存位置addr处 设置datasize大小内存,值为 val

writemem:从指定线性地址dump一个字节的内存内容 到一个文件中

crc addr1 addr2:显示物理地址范围 addr1..addr2之间内容的 CRC值

6、查看信息命令

r/reg/regs/registers:查看CPU整数寄存器和内容

fp/fpu:查看FPU寄存器和内容

mmx:查看MMX寄存器和内容

sse/xmm:查看SSE寄存器和内容

ymm:查看所有AVX寄存器和内容

sreg:查看段寄存器和内容

dreg:查看调试寄存器和内容

creg:查看控制寄存器和内容

info cpu:查看CPU所有的寄存器以及内容

info eflags:显示解析的EFLAGS寄存器

info tab:显示分页地址转换

info device:显示指定设备的状态

info break:显示当前所有断点状态

7、CPU寄存器操作

set reg = expr:修改CPU寄存器值为expr。当前只有通用寄存器和指令寄存器支持修改。不能够修改标志寄存器,段寄存器,浮点寄存器和SIMD寄存器。

registers:查看CPU寄存器及值,可以简写为regs,reg,r。

8、反汇编操作

disassemble start end:在给定的线性地址范围内反汇编指令,包含start处指令,不包含end处指令。使用”set $disassemble_size =”告诉调试器设定的段大小。如果只想反汇编第一条指令,则可以不给出end,或将end值设置小于start即可。

disassemble switch-mode:在Intel和 AT&T两种汇编风格之间切换

disassemble size = n:设定调试器执行反汇编命令时使用的段大小,使用0,16,32。值0意思是使用当前的CS段寄存器,默认值是0.

set $auto_disassemble = n:如果n=1,每次停止执行时就反汇编当前的指令,默认值为0。当前CPU上下文的段大小用于反汇编,所以变量”disassemble size”就被忽略了。

set disassemble on:’set $auto_disassemble = 1’

set disassemble off:’set $auto_disassemble = 0’

9、指令跟踪

trace on:反汇编每一条执行的指令。

trace off:关闭指令跟踪功能

10、指令功能

Bochs指令功能需要在编译时设置,需要在”instrument/“目录下构建自定义的指令库到单独目录中,在配置中设置想要使用的指令库,用--enable-instrumentation选项指定。

-enable-instrumentation="instrument/stubs"

11、其它指令

ptime:打印当前时间

sb delta:在未来执行中插入一个时间断点“delta”指令(“delta”是一个64位的整数,跟着字母”L”,例如1000L

print-stack [num words]:打印num words个栈顶端的16-bit字。num words默认16,只在保护模式下栈的段寄存器基址是0的情况下才有效。

modebp:触发CPU模式转换断点

ldsym [global] filename [offset]:从文件filename加载符号。如果添加了全局关键字,在所有的上下文中(即使那个上下文没有加载这些符号)符号都可见。Offset(默认值为0) 被添加到每一个符号条目。符号仅仅不加载当前正在执行的上下文。符号文件由零个或多行的”%x %s”格式的组成。

show  - 显示当前的模式

show mode     - 当处理器切换模式时显示

show int      - 当中断发生时显示
show call     - 当调用发生时显示
show ret      - 当返回发生时显示
show off      - 关闭符号信息
show dbg-all  - 开启所有的显示标记
show dbg-none - 关闭所有的显示标记

三、Bochs调试器GUI支持

1、Bochs GUI调试支持

Bochs调试器GUI支持需要在编译时进行设置,在编译时就需要用默认的调试器开关和参数标记--enable-debugger-gui进行配置。

configure --enable-debugger --enable-disasm --enable-debugger-gui

2、GUI启动配置

Bochs启动运行时,如果需要以GUI方式启动,需要将gui_debug值添加进display_library选项参数中。

display_library: x, options="gui_debug"

支持GUI的bochsrc.txt配置文件如下:

#####################################################
# Bochs的配置文件
# Configuration file for Bochs
###################################################### how much memory the emulated machine will have
megs: 32# filenameof ROM images
romimage:file=/usr/local/share/bochs/BIOS-bochs-latest
vgaromimage:file=/usr/local/share/bochs/VGABIOS-lgpl-latest# which disk image will be used
floppya:1_44=hello.img, status=inserted# choose the boot disk 确定启动方式
boot: floppy# where do we send log messages?
log: bochsout.txt# disable the mouse
mouse: enabled=0# enable key mapping ,using US layout as default
keyboard:keymap=/usr/local/share/bochs/keymaps/x11-pc-us.map# GUI support
display_library: x, options="gui_debug"

Bochs调试器GUI如下:

GNU开发工具——Bochs模拟器相关推荐

  1. GNU开发工具的使用方法

    GNU开发工具的使用方法 一.vi编辑器使用方法 1.1 vi编辑器 1.2 vi的基本命令 二.makefile的编写 2.1 makefile简介 2.2 make命令 2.3 隐含规则 三.gc ...

  2. GNU开发工具简介(一)

    第一节 GNU Tools开发工具简介 GNU开发工具 为了有效地进行嵌入式开发,至少需要了解和掌握如下几类工具: 编译开发工具:即能够把一个源程序编译生成一个可执行程序的软件,如gcc等. 调试工具 ...

  3. gba开发工具_GBA-GBC模拟器(VisualBoyAdvance-M)

    我们的目标是提高整合VisualBoyAdvance的最佳功能.基于VisualBoy Advance开发的GBA模拟器,VisualBoy Advance停止开发后,这个模拟器一直在VisualBo ...

  4. GNU 开发工具(GNU Development Tools)

    全称 gdb - GNU 调试器 概要 gdb [-help] [-nh] [-nx] [-q] [-batch] [-cd=dir] [-f] [-b bps] [-tty=dev] [-s sym ...

  5. GNU开发工具——WireShark网络分析工具

    一.WireShark网络分析工具简介 1.WireShark简介 Wireshark是目前全球使用最广泛的开源网络封包 分析软件(前身为Ethereal),由Gerald Combs编写并于1998 ...

  6. GNU开发工具——GDB快速入门

    一.GDB简介 GDB是一个由GNU开源组织发布的.UNIX/LINUX操作系统下的.基于命令行的.功能强大的程序调试工具.GDB能够跟踪程序的执行,也能够恢复程序崩溃前的状态. GDB常规功能如下: ...

  7. GNU开发工具——SVN简介

    一.SVN简介 SVN是Subversion的简称,是一个开放源代码的集中式版本控制系统,是CVS的改进版,采用了分支管理系统,设计目标就是取代CVS. 1.SVN服务器 SVN服务器支持linux和 ...

  8. 【转】部分游戏开发工具

    2019独角兽企业重金招聘Python工程师标准>>> GPL许可证        GPL通用性公开许可证(General Public License,简称GPL).在字典中的含义 ...

  9. 部分游戏开发工具(转载)

      GPL许可证 GPL通用性公开许可证(General Public License,简称GPL).在字典中的含义是非洲大羚羊,我们可以常常看到非常个性化的羊头,想必很多人已经非常熟悉.象征 GNU ...

  10. 嵌入式开发工具链概述

    一.嵌入式系统软件开发流程 高级语言编写的源代码文件-->交叉编译器-->目标文件-->链接器 用目标机的汇编语言编写的源代码文件-->交叉汇编器-->目标文件--> ...

最新文章

  1. centos6 配置ip、服务
  2. opencv阈值化(五)
  3. xampp启动Apache端口被占用,修改端口
  4. 11月4日,上海开源基础设施峰会,不见不散!
  5. php js鼠标滚动刷新,利用php和js实现页面数据刷新
  6. 游戏测试与一般的软件测试的区别在哪里?
  7. 真甲先生 38期:2019年百度快排×××?
  8. Anaconda下载安装与手动配置环境变量
  9. C# IntPtr类型和使用/unsafe选项编译程序
  10. 人工智能英语演讲总结,持续更新~
  11. rs485接口上下拉_RS485上拉下拉电阻计算详解
  12. 程序员每天自动填写周报日报工时脚本完整脚本(附源码)
  13. 计算机网络:网络传输介质
  14. 【沃顿商学院学习笔记】公益创业——01开始公益创业Starting a Social Enterprise
  15. Attempted read from closed stream
  16. html多页面之间如何通信,html5中sharedWorker实现多页面通信代码示例
  17. python节日快乐_【python】一键生成漂亮的节日快乐词云图
  18. 基于STM32的门禁系统源码分享
  19. web编程期中项目作业
  20. Softing smartLink网关——推进过程工业数字化转型

热门文章

  1. FLV文件格式官方规范详解
  2. 使用ecstore-sdk开发包制作易开店和启明星模板
  3. Java使用poi导出Excel之格式设置
  4. c语言编程的现状,C语言编程开发发展现状分析
  5. java开发冒险岛系统实训报告_樱妖冒险岛079完美源码
  6. Android 自动接听来电
  7. php读写明华读卡器,rwCard 明华USBIC卡读卡器IC卡读写程序 - 下载 - 搜珍网
  8. 电商API,获得淘宝商品类目
  9. STM32CubeIDE 下载及安装教程
  10. PDF控件PDF Creator V5.5.2.3发布 | 支持插入PDF417条形码