首页
社区
课程
招聘
7
使用bochs调试操作系统
发表于: 2010-10-29 14:41 26220

使用bochs调试操作系统

2010-10-29 14:41
26220

题目:使用bochs调试操作系统


Author:Cryin


Date:2010.10.27


连接:


一、环境配置:


  操作系统:Microsoft Windows XP Professional Service Pack 3


  调试工具:bochs 2.4.0.0


1、安装:Bochs


      Bochs是一种十分轻便的使用c++编写的开源IA-32(x86)电脑模拟器,可以运行在最受欢迎的平台上。它仿真英特尔x86 CPU、常见的I/O设备、和定制的BIOS。目前,Bochs可以被编译仿真386、486、Pentium/PentiumII/PentiumIII/Pentium4或x86-64位的CPU,包括可选的MMX,SSEx和3DNow指令。在Bochs仿真环境里能够运行许多操作系统,比如Linux、DOS、Windows 95/98/NT/2000/XP或者Windows Vista。Bochs是由凯文·劳顿编写的,目前由“


      如果论性能的话bochs远不及VMware等其他虚拟机,但在调试方面,bochs却有其它虚拟机所不及的优越之处。本文主要介绍如何配置bochs调试环境以及如何用bochs调试MBR程序。重点介绍调试环境配置方法和简单的MBR实例调试。并不对调试MBR做详细分析。主要是做一个文档型的记录。因为本人在使用bochs调试这个过程中摸索了相当长时间,也走了不少弯路。所以如果这个文档能给一些人带来些许帮助,也算是助人为乐,再者,几乎每次重新搭建bochs时总是很乱,所以写此文以备将来再次配置调试环境做参考!


      Bochs的最新发布版本可以从它的主页下载,也可以从该主页获取到相关说明文档以及源代码。本例使用版本为bochs2.4.0.0。


      配置Bochs需要相关的文件有bochs.exe、bochsdbg.exe、bximage.exe、DEBUG32.EXE以及一些原本没有可能需要自己下载的文件niclist.exe和WinPcap_4_0_2.exe。既然bochs本身是虚拟机那首先要装一个系统,本例使用win 2k系统。


       1)创建虚拟硬盘:


  双击运行bximage.exe创建一个4G、flat模式的虚拟硬盘文件disk.img;这样就会在当前目录下生成大小为4G的disk.img文件。具体操作如图:


              


       2)安装系统:


  用win 2k系统盘直接安装或者创建一个ISO镜像的文件,鉴于bochs虚拟机的速度,还是不推介自己安装系统,最好和别人直接拷贝一份已经安装好操作系统disk.img文件。


       3)创建win2k.bxrc:


  主要内容:


  #win2k.bxrc配置信息


  #设置默认系统BIOS ROM模块


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


  #设置CPU参数 


  cpu:count=1,ips=22100000, reset_on_triple_fault=1,  cpuid_limit_winnt=0, msrs="msrs.def"


  #设置内存,可以选择8、16、32、64、128或者512


  megs: 512


  #设置默认VGA ROM模块


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


  #vga: extension


  vga: extension=vbe


  #选择并设置软驱A,注意此处设置,在调试时将mbr文件改为a.img即可进行调试


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


  #ATA controller for hard disks and cdroms


  ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14


  ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15


  ata2: enabled=0, ioaddr1=0x1e8, ioaddr2=0x3e0, irq=11


  ata3: enabled=0, ioaddr1=0x168, ioaddr2=0x360, irq=9


  #选择引导设备


  boot: floppy, disk


  # Enables or disables the 0xaa55 signature check on boot floppies


  floppy_bootsig_check: disabled=0


  #关闭日志


  log:nul


  # LOG CONTROLS


  panic: action=ask


  error: action=report


  info: action=report


  debug: action=ignore


  # DEBUGGER_LOG:


  debugger_log: -


  #设置建立串口通道,可以与windbg相连.本例中不需要可以注释掉


  com2: enabled=1, mode=pipe-server, dev=\\.\pipe\com_2


  # VGA_UPDATE_INTERVAL


  vga_update_interval: 300000


  # KEYBOARD_SERIAL_DELAY


  keyboard_serial_delay: 250


  # KEYBOARD_PASTE_DELAY


  keyboard_paste_delay: 100000


  # MOUSE


  mouse: enabled=0


  #private_colormap


  private_colormap: enabled=0


  #设置网卡信息


  ne2k:ioaddr=0x300,irq=10,mac=00:1B:77:59:AC:28,ethmod=win32,  


              ethdev=\Device\NPF_{5175FF64-AD7E-4B75-A4E0-540FA4AAF493}


  # pnic: Bochs/Etherboot pseudo-NIC


  pnic: enabled=1, mac=00:26:55:36:ec:ae, ethmod=vnet


  # KEYBOARD_MAPPING


  keyboard_mapping: enabled=0, map=


  # #设置硬件设备显卡、网卡.


  i440fxsupport: enabled=1, slot1=pcivga, slot2=ne2k


  #设置PCI设备码、厂商码.貌似可以随便写


  pcidev: vendor=0x1234, device=0x5678


  #end of win2k.bxrc配置信息


  


  上面关于win2k.bxrc配置信息的内容中有一处需要设置网卡信息,这个就可以使用我上面提到的niclist.exe这个程序了,而使用这个程序需要安装WinPcap,本例使用WinPcap_4_0_2.exe;双击niclist.exe即可获得相关信息,本例使用本机的网卡信息,图上显示数条网卡信息因安装VMware缘故。如图:


            


       4)创建运行bochs的批处理文件


       创建运行bochs批处理文件"运行.bat",主要内容:


  set BXSHARE=F:\bochs #此处为bochs调试器bochs.exe的路径


  %BXSHARE%\bochsdbg.exe -q -f win2k.bxrc  


  rem %BXSHARE%\debug32.exe -q -f  win2k.bxrc  


  #win2k.bxrc为上一步创建的win2k.bxrc配置信息文件


       5)使用bochs开始调试:


       到这一步就可以使用bochs进行调试了,双击"运行.bat"批处理文件即可打开bochs调试器,如果有a.img文件,bochs会以光盘启动方式启动操作系统;如果没有a.img文件,bochs会以硬盘形式启动操作系统,当然a.img的名称可以在win2k.bxrc配置信息文件中按照个人喜好随意修改。


  二、使用bochs调试MBR


       1)编写MBR程序:


      本例中使用我之前写过的一个MBR小程序"基于MBR的系统登录密码验证程序"进行演示使用bochs调试MBR的方法,具体可参见

http://bbs.pediy.com/showthread.php?t=121797,首先将汇编代码用NASM编译生成的bin文件拷贝到bochs文件夹下并更名为a.img,这样bochs就会以a.img作为光盘启动操作系统。


       2)Bochs调试命令:


       鉴于文章主题,这里只简单介绍一些最常用的bochs调试命令,作为入门这些就足够了,更多的可以参考bochs相关的说明文档。网上也有很多bochs调试命令的资料。下面只介绍本例中用到的若干命令;


  命令 c   运行程序,相当于windbg的g以及OD的F9


  命令 s  即step,单步执行程序


  命令 p  单步执行,步过函数


  命令 q  退出bochs并关闭虚拟机


  命令 b  下断点命令,如本例中:b 0x7c00


  命令blist 显示断点状态


  命令 watch  显示当前所有读写断点


  命令 r  显示寄存器的值


  命令 u  反汇编代码,可设定起始和结束位置


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
赞赏记录
参与人
雪币
留言
时间
Youlor
为你点赞~
2024-5-31 04:18
伟叔叔
为你点赞~
2024-2-26 02:29
QinBeast
为你点赞~
2024-1-18 04:52
心游尘世外
为你点赞~
2024-1-14 03:05
shinratensei
为你点赞~
2024-1-14 00:06
飘零丶
为你点赞~
2023-12-29 00:07
PLEBFE
为你点赞~
2023-3-15 05:00
最新回复 (17)
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
轻轻  顶起
2010-10-29 15:07
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学习了,顶   
2010-10-29 15:12
0
雪    币: 440
活跃值: (907)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
4
写得不错
有时间学学
2010-10-29 16:14
0
雪    币: 560
活跃值: (263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
收下 命令和Windbg差不多
2010-10-29 16:18
0
雪    币: 121
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
学习 收藏 并顶起~~
2010-10-29 16:53
0
雪    币: 338
活跃值: (103)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
7
收下了 感谢楼主
2010-10-29 16:58
0
雪    币: 161
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
这个我喜欢。
2010-10-30 10:23
0
雪    币: 272
活跃值: (120)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这个要学习一下。
2010-10-30 17:51
0
雪    币: 296
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
版主赶紧射精吧。。。
2010-10-30 18:22
0
雪    币: 1259
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
stu
11
这个不错啊。
2010-10-30 18:41
0
雪    币: 241
活跃值: (235)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
12
有几个人看了文章问起bochs能不能调试操作系统,看来先前题目有点不准确,貌似误导大家了,所以将原题目使用bochs调试MBR修改为使用bochs调试操作系统!希望不知道的人能够认识到这一点。bochs可以调试MBR。调试操作系统也是可以的!还有所有截图是最近截得XP的图,内容是通过win2k的配置内容写的。不过没什么差别!
2010-11-12 17:11
0
雪    币: 93
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
多谢LZ,学习了!!!
2010-11-12 17:23
0
雪    币: 324
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
好庞大的xp,这种调试还有没有实际的意义啊?太复杂了,只是调试mbr才对吧……
2010-11-12 17:34
0
雪    币: 241
活跃值: (235)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
15
看效率吧。。不过我强调的是bochs可以用来调试操作系统。至于哪一种调试器效率更高。可以自己看情况选择!不一定就要使用bochs。。
2010-11-12 17:44
0
雪    币: 161
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
我调CPU时候怎么总提示失败呢?别的都正常。
2010-11-12 22:30
0
雪    币: 76
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
the next context is referenced from internet , I am sorry for failing to regain  the original author 's name .  following the paper I succeeded to installing my debug enviroment. to copy it here maybe useful or someone .

1、下载安**ochs……(这步不会的下面可以不用看了……)
2、在Bochs安装目录中创建一个WinXP文件夹(同上面的括号)
3、创建虚拟硬盘用于存放WinXP镜像
具体步骤:
进入命令提示符,使用bximage工具
生成image需要回答几个问题
一:生成硬盘还是软盘
二:镜像类型 flat sparse or growing
三:镜像大小:WinXP一般5GB足够了
四:镜像名称:这个按照您个人的喜好吧
请注意!最后会要求你复制下面一行虚拟硬盘的参数,一定要复制下来,
否则一旦cmd退出,这些参数很难找回来
下面给出我用Bximage创建虚拟硬盘的范例
C:\Program Files\Bochs-2.4.5>bximage
========================================================================
                                bximage
                  Disk Image Creation Tool for Bochs
        $Id: bximage.c,v 1.34 2009/04/14 09:45:22 sshwarts Exp $
========================================================================

Do you want to create a floppy disk image or a hard disk image?
Please type hd or fd. [hd] hd

What kind of image should I create?
Please type flat, sparse or growing. [flat] flat

Enter the hard disk size in megabytes, between 1 and 129023
[10] 5000

I will create a 'flat' hard disk image with
cyl=10158
heads=16
sectors per track=63
total sectors=10239264
total size=4999.64 megabytes

What should I name the image?
[c.img] winxp.img

Writing: [] Done.

I wrote 5242503168 bytes to winxp.img.

The following line should appear in your bochsrc:
ata0-master: type=disk, path="winxp.img", mode=flat, cylinders=10158, heads=16
, spt=63
(The line is stored in your windows clipboard, use CTRL-V to paste)

Press any key to continue

(粗体为需要输入的数据)
过程很简单

之后将安装目录下生成的img文件移动到你创建的文件夹中

4、下面就是配置WinXP虚拟机参数,
具体步骤
从bochs安装目录的dlxlinux复制出bochsrc.bxrc
用记事本打开编辑

############IMPORTANT##############
cpu: count=1, ips=10000000, reset_on_triple_fault=1, ignore_bad_msrs=1

################上面这句话非常重要,如果不加上,安装Windows XP的时候会蓝屏###############

# how much memory the emulated machine will have
megs: 256
##############此处改为256(内存大小,你可以根据你自己的需要修改,不过建议最好不要低于256M)

# filename of ROM images
romimage: file=BIOS-bochs-latest
vgaromimage: file=VGABIOS-lgpl-latest
###########我将BIOS-bochs-latest 和VGABIOS-lgpl-latest 复制到了我创建的文件夹中,于是去掉了"../"

# what disk images will be used
##删去此处无用的内容

# hard disk
#此处复制刚才那段要复制下来的参数
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master: type=disk, path="winxp.img", mode=flat, cylinders=10158, heads=16, spt=63
ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15
ata1-master: type=cdrom, path=f:, status=inserted, biosdetect=auto, model="Generic 1234"
#我存放WinXP安装盘在f:(物理光驱) 你也可以使用ISO文件来安装WInXP

# choose the boot disk.
boot: cdrom,disk
#此处像我这样修改

#后面不动

# default config interface is textconfig.
#config_interface: textconfig
#config_interface: wx

#display_library: x
# other choices: win32 sdl wx carbon amigaos beos macintosh nogui rfb term svga

# where do we send log messages?
log: bochsout.txt

# disable the mouse, since DLX is text only
mouse: enabled=0

# enable key mapping, using US layout as default.
#
# NOTE: In Bochs 1.4, keyboard mapping is only 100% implemented on X windows.
# However, the key mapping tables are used in the paste function, so
# in the DLX Linux example I'm enabling keyboard_mapping so that paste
# will work. Cut&Paste is currently implemented on win32 and X windows only.

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

按照上面的提示修改即可,你也可以像注释一样复制BIOS-bochs-latest 和VGABIOS-lgpl-latest 到你创建的文件夹中……

还有再啰嗦一句,上面说了有一句话非常重要,如果不加上装系统会蓝
参见http://bochs.sourceforge.net/doc/docbook/user/guest-winxp.html

5、打开bochs,Load你刚刚修改完的bochsrc.bxrc
2011-2-23 16:11
0
雪    币: 233
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
学习!
2011-7-29 23:31
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册