调试环境的搭建(三)

,,,,,,,,上节博客中我们写了一个主引导程序,运行的还算完美,已经正确的实现了我们想要的功能,那么问题来了,它只是显示一个字符串,如果在字符串没有显示出来程序就挂掉了,那么我们此时应如何去查证?换句话说,如何调试主引导区的代码?今天我们便来介绍下另一款优秀的虚拟机软件(<强> )。

,,,,,,,,先来看看Bochs的一些特点:

,,,,,,,,那么支持调试功能的Bochs版本怎样进行配置呢?步骤如下

,,,,,,,, <强> 1,下载源码:https://sourceforge.net/projects/bochs/files/

<>强,,,,,,,,2,解压缩Bochs x.x.tar——2.。广州得到bochs - 2. x。x文件夹

<强>,,,,,,,,3,进入源码目录:cd bochs - 2. - x.x

<>强,,,,,,,,4,进行配置:。/configure——enable-debugger enable-disasm

<强>,,,,,,,,5,使

<>强,,,,,,,,6,使安装

,,,,,,,,

,,,,,,,,经过以上六步就完成了Bochs的环境搭建了,值得注意的是博主在搭建过程中出现了一个错误,在第五步做的时候出现了:/usr/bin/ld: gui/libgui.a (gtk_enh_dbg_osdep.o):未定义的引用symbo的错误以导致不能继续执行下去,经过搜查资料,解决办法是在Bochs - 2. x。x文件夹里的Makefile,在92行左右找到库=?在这一行最后面添加-lpthread就ok了。注:修改完成之后不能重新配置,不然添加的-lpthread会消失,添加后直接使就可以了。

,,,,,,,,在搭建好环境之后我们便需要来配置一个启动文件<强> 强,文件内容如下

调试环境的搭建(三)

,,,,,,关于上面启动文件的中的几个路径确定方法如下:1,确定bochs的安装路径:bochs; 2,安装vgabios,确定的它的路径:那儿离vgabios。

,,,,,,,,下来我们来看看启动bochs虚拟机的方法,分为两种:<强>

,,,,,,,, a>显示启动:bochs - f bochsrc_file;

,,,,,,,, b>隐式启动:bochs

,,,,,,,调试环境的搭建(三)

        那么如何来验证调试环境呢?我们启动 bochs 后按 6 来模拟启动,然后输入 continue,如果出现的模拟终端显示出我们所要打印的字符串,那便算是我们已经成功安装 bochs 虚拟机了。下来看看最后的效果图

调试环境的搭建(三)

        我们在输入 bochs 隐式启动方式后,然后再输入 6 来进行模拟启动终端,效果如下

调试环境的搭建(三)

        我们看到在输入 continue 后终端成功的出现我们自己的输出的字符串,证明此时我们的 bochs 环境已经搭建成功了。那么我们如何来进行 bochs 的调试)呢? bochs 常用的一些调试命令如下

调试环境的搭建(三)

        我们来尝试下设置断点,如下

调试环境的搭建(三)

        我们看到在设置断点 0x7c00 之后,info 看下断点信息,确实是在 0x7c00 处打了个断点。继续 continue 执行,发现这时的虚拟机 bochs 已经上电成功。我们看到接下来它要执行的是 mov ax, cs 这条指令,是不是我们当时所写的 start 的第一条指令呢?确实是的,那么它后面的 8cc8 是什么意思呢?它指的是这条指令所对应地址的数据,下来我们继续执行 continue,看看最后效果

调试环境的搭建(三)

        我们看到已经成功执行了我们自己编写的主引导程序。下来我们执行下单步调试,看看结果

调试环境的搭建(三)

        我们看到 step 单步调试执行的结果和我们之前所编写的主引导程序的代码是一样的。通过今天对调试环境 bochs 的搭建,总结如下:

调试环境的搭建(三)