首页 > 代码库 > Bochs安装FreeDOS与调试

Bochs安装FreeDOS与调试

最经看《80x86汇编语言程序设计》杨季文等著,里面的保护模式的例子无法调试,后来查到bochs可以调试,就折腾了一番,这里写下吧……

>>>>>>>>>>>>>>>>>>>>>>>无耻的分割线>>>>>>>>>>>>>>>>>>>>>>>>

下载地址:

Bochs:http://bochs.sourceforge.net/

FreeDOS:http://www.freedos.org/      这个我下载的1.0,官网上是1.1,一是1.1比1.0大,而是我这1.1安装时卡逼了……1.0装成了……

WinImage:http://www.xdowns.com/soft/6/7/2006/Soft_29274.html     用于将需要的文件加入到虚拟硬盘

接下来是安装:

Bochs没啥说的,就是安装时把那个DLX Linux Demo也选上,后面方便点,这个您随意……安装时选择Install just for me就可以自定义了,安装完后桌面上会出现一个打开简易linux的快捷方式,如果您刚才选择安装了的话

接下来就是配置了

首先打开安装目录,打开bximage.exe创建虚拟硬盘,前两部可以直接摁回车,到了第三步是设置大小的,默认10M……大小您自己看着办吧,别小的装不下系统就好 - -

第四步是给这文件起个名字……您继续随意……但后缀得是.img,然后别着急着关,下面会出现一传参数,它已经给你复制好了,一会你直接复制到配置文件就可以了,下面说下配置文件

如果您装了哪个linux,就把她里面的配置复制过来改改就好,没装的话,您照着bochs安装目录下的bochsrc-sample.txt文件改,别看一大堆,大部分是注释,带#号的都是注释……首先新建个文件夹,例如freedos,将虚拟硬盘、操作系统的iso文件和那个配置文件复制过来,然后改配置文件了

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

# how much memory the emulated machine will have

#这是内存的大小

megs: 32                                                                                        
# filename of ROM images

#这是bios文件地址 romimage: file=../BIOS-bochs-latest vgaromimage: file=../VGABIOS-lgpl-latest
# what disk images will be used 

#这是设置要使用的软盘驱动器。 floppya: 1_44=floppya.img, status=inserted floppyb: 1_44=floppyb.img, status=inserted
# hard disk

#这是硬盘 ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14 ata0-master: type=disk, path="hd10meg.img", cylinders=306, heads=4, spt=17
# choose the boot disk.

#这是选择启动盘,c表示从“硬盘”启动,这个可是指我们的虚拟硬盘 boot: c
# 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:nul log: bochsout.txt
# disable the mouse, since DLX is text only

#是否要鼠标。 mouse: enabled=0

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

上面这个是那个linux的配置文件,注释我也从别地抄过来了……接下来把刚才虚拟硬盘那行参数复制到硬盘那里,注释掉原来的

>>>>>>>>>>>>>>>>>>>>>>>>

# hard disk

#这是硬盘 ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14 #ata0-master: type=disk, path="hd10meg.img", cylinders=306, heads=4, spt=17

ata0-master: type=disk, path="100M.img", mode=flat, cylinders=203, heads=16, spt=63

ata0-slave: type=cdrom, path="操作系统文件名.iso", status=inserted

>>>>>>>>>>>>>>>>>>>>>

这里改成cdrom,安装完成后再改成c

>>>>>>>>>>>>>>>>>>>>>>>>>

# choose the boot disk. boot: cdrom

>>>>>>>>>>>>>>>>>>>>

接下来打开freedos文件下,也就是您刚创建的文件夹下的bochsrc.bxrc开始安装freedos

执行bochsrc.bxrc,格式化硬盘:

 a.Prepare the harddisk for FreeDOS 1.0 Final by running XFdisk,回车后选择OK;
    b.继续回车,选择New Partition / Primary Partition,一路YES下去;
    c.继续回车,选择Install Bootmanager;
    d.按F3,一路YES下去;

5、安装FreeDOS

a.Continue with FreeDOS installation
    b.Start installation of FreeDOS 1.0 Final
    c.一路YES下去即安装完成;

安装完成后打开配置文件把boot: cdrom这里再改为boot: c即可

运行freedos,进入dos后md新建个文件夹

往里面添加要调试的文件,用winimage打开你创建的那个虚拟硬盘,把文件加入你创建的那个文件夹即可

>>>>>>>>>>>>>>>>>>>>>>万恶的分割线>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

接下来是调试打开bochsdbg.exe,单击Load,载入freedos的配置文件,然后start,就断在那里了,下面给大家一些调试命令和方法

bochsdbg的基本命令:

指令举例说明
b addrb 0x7c00在指定内存物理地址设置断点
info binfo b查看已经设置了的断定信息
d numd 1删除断点,num为使用info b显示的断点序号
cc继续执行,直到遇到下一个断点
ss单步执行
nn单步执行(遇到函数跳过)
u start endu 0x7c00 0x7ca0反汇编一段内存
sregsreg查看寄存器信息(查看GDT与LDT是否加载正确,段寄存器的值等)
rr查看通用寄存器信息

 

下面是网上找到的一些方法:

 

第一种:陷阱

在内存某位置挖一个坑,等着我们的程序跳进去。在程序开头处增加一段代码,访问某内存地址,在Bochsdbg里下该地址的内存访问断点。程序一开始运行……等它跳进来的时候抓住它。

详细过程请猛击这里:http://www.aogosoft.com/downpage.asp?mode=viewtext&id=140

第二种:死循环

在程序开头加一句jmp $让我们的程序死循环,在Bochs里执行这个程序,然后在Bochsdbg里按下Ctrl+C,然后修改EIP寄存器的值指向我们的程序入口。

前两种都是在网上找到的,都可行,但是比较麻烦,下面这种是天杀老大教给我的,也是Bochs提供的功能。

在程序开始处添加一句xchg bx,bx,然后在Bochsrc.bxrc文件里添加一句magic_break: enabled=1,然后选择调试启动Bochs虚拟机,当执行到xchg bx,bx指令时就会自动断到Bochsdbg里。

这种方法在Bochsrc_sample.txt文件里有介绍,但我想很多人都跟我一样没仔细看:-)

 

参考:

http://blog.csdn.net/fazai001/article/details/6694559

http://www.360doc.com/content/12/0108/15/6938655_178090482.shtml

Bochs安装FreeDOS与调试