linux下c/c /汇编/内核编程与调试(07)-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 893619
  • 博文数量: 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凯发k8官网下载客户端中心官网下载最新版本的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:反汇编执行的每一条指令。

 

 

阅读(2538) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图