Chinaunix首页 | 论坛 | 博客
  • 博客访问: 892339
  • 博文数量: 113
  • 博客积分: 3160
  • 博客等级: 少校
  • 技术积分: 1801
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-19 10:09
文章分类

全部博文(113)

分类: LINUX

2012-05-27 14:33:35

    7 bochs应用    
 
 
 
 7.1bochs简介  
 
 

Bochs是一个基于LGPL的开源x86虚拟机软件,它能够仿真整个Intel x86计算机的程序,它还支持所有的标准PC外设的驱动模型:键盘,鼠标,VGA显卡/显示器,磁盘,时钟芯片,网卡.Bochs能够仿真整个PC环境,这也导致了它仿真的速度比较慢,相比于其它虚拟机性能要差很多。

 

而且,现在的Bochs已经实现了一定程度的调试功能,对跑在Bochs里面的代码来说,这就是“硬件调试器”。所以,bochs非常适合调试我们自己的操作系统。Bochs的调试命令风格是按照GDB习惯来设计的,如果你习惯使用gdb,会发现bochs的调试命令很熟悉,很容易上手。 

 

 

7.2bochs安装    
 
 

1.下载源码包

 

Bochs官网下载最新版本的bochs源码包,我的版本为2.5.1。然后用tar命令解压并cd进入其目录。

tar vxzf bochs-2.5.1.tar.gz

cd bochs-2.5.1

注意:如果你的系统没有安装G++编译器,请安装,否则会在./configure的过程中出错

 

 

2. 执行配置,开启调试和反汇编

 

./configure --enable-debugger --enable-disasm

 

 

3:出错处理

 

我在ubuntu10.04  11.04 12.04下安装bochs都会出现以下两个错误:

1ERROR: X windows gui was selected, but X windows libraries were not found.

通过安装xorg-dev包解决:sudo apt-get install xorg-dev

2Package gtk+-2.0 was not found in the pkg-config search path.Perhaps you should add the directory containing `gtk+-2.0.pc'to the PKG_CONFIG_PATH environment variableNo package 'gtk+-2.0' foundERROR: pkg-config was not found, or unable to access the gtk+-2.0 package.Install pkg-config and the gtk+ development package,or disable the gui debugger, or the wxWidgets display library (whichever is being used).

输入下面命令解决:sudo apt-get install libgtk2.0-dev

 

 

4.重新执行配置(如果出错,请执行上述处理)

 

./configure --enable-debugger --enable-disasm

然后运行make

sudo make install

 

 

5.完成,执行bochs

 

 

7.3  bochs配置文件  
 
 

bochs在启动的时候,会在用户的当前目录下按照顺序将如下文件作为默认的配置文件:

.bochsrc   bochsrc   bochsrc.txt

因此,我们需要自己写一个配置文件,放在自己的工作目录下,然后在该目录下执行bochs命令,或者你也可以使用-f参数来指定使用哪一个配置文件。

 

 

下面是一个简单的Bochs配置文件:

###############################################

#  Configuration file for Bochs

###############################################

 

第一步,首先设置Bochs在运行过程中能够使用的内存,本例为32MB

关键字为:megs

megs: 32

 

第二步,设置对应真实机器的BIOSVGA BIOS.

对应两个关键字为:romimage 和 vgaromimage

romimage: file=$BXSHARE/BIOS-bochs-latest

vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest

 

第三步,设置Bochs所使用的磁盘,软盘的关键字为floppy

若只有一个软盘,则使用floppya即可,若有多个,则为floppyafloppyb...

floppya: 1_44=a.img, status=inserted

 

第四步,选择启动盘符。

boot: floppy

 

第五步,设置日志文件的输出。

log: bochsout.txt

 

第六步,开启或关闭某些功能。

下面是关闭鼠标,并打开键盘。

mouse: enabled=0

keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/x11-pc-us.map

 

更详细内容可以使用man bochsrc命令查询,每一个关键字都有详细解释。

 

 

 

7.4  Bochs下调试    
 
 
7.4.1单步执行  
 
 

c 继续执行,直到遇到断点 

单步执行,遇到函数进入函数体,count 默认为 1。 

单步执行,遇到函数则跳过函数体。 

  退出调试,同时关闭虚拟机。 

 

 

7.4.2 设置断点  
 
 

b [addr]   在物理地址上下断点,地址前可以加上一个“*”。

vb [seg:off]  在虚拟地址上下断点。 

lb [addr]  在线性地址上下断点。 

blist 显示断点状态。 

delete [num]  删除断点。mum是断点号,可以用blist命令查询。

info break 显示断点信息。 

 

 

7.4.3 读写断点  
 

watch read [addr]  设置读断点。

watch write [addr] 设置写断点。

unwatch read [addr]  清除读断点。

unwatch write [addr]  清除写断点。

watch  显示当前所有读写断点。

unwatch 清除当前所有读写断点。

watch stop|continue  开关选项,设置遇到读写断点时,中断下来还是显示出来但是继续运行。 

 

 

7.4.4 内存操作 
 

x /nuf [addr]  显示线性地址的内容

xp /nuf [addr]          显示物理地址的内容

   n  显示的单元数

   u  每个显示单元的大小,可以是 b BYTEh WORDw DWORDg DWORD64 

   f  显示格式

setpmem [addr] [size] [val] 设置物理内存某地址的内容,size的值只能是0x1,0x2,0x4

查看堆栈的值:print-stack

 

 

7.4.5 寄存器操作  
 
 

查看所有寄存器的值:info cpu

查看通用寄存器的值:r

查看段寄存器的值:sreg

查看控制寄存器的值:creg

查看浮点寄存器的值:fp

设置寄存器的值:  set $reg = val

r  reg = val  同上。 

显示完整的CPU信息:dump_cpu 

设置CPU状态:set_cpu 

 

 

7.4.6 反汇编命令
 
 

u|disas|disassemble [/num] [start] [end]

反汇编物理地址startend 之间的代码,如果不指定参数则反汇编当前EIP指向的代码。

num是可选参数,指定处理的代码量。

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

 

 

阅读(2533) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~