在上一篇文章《环境搭建以及第一个Hello-World》中,笔者讲了如何安装 bochs 以及运行一个 helloworld 操作系统,但是使用上一篇文章中的方法安装的 bochs 是不支持调试的,下面我讲介绍如何使用源码编译的方法来安装 bochs,以及使用 bochs 来调试操作系统。
#编译安装 Bochs
- 下载 bochs 源码
http://sourceforge.net/projects/bochs/files/bochs/2.6.8/
- 解压之后进入该目录,进行配置
sudo ./configure --enable-debugger --enable-disasm
- 编译安装
sudo make
sudo make install
这时,bochs 就编译安装完成了,接下来我们继续使用上一篇文章中所使用的软盘映像。
#用 Bochs 调试操作系统
启动带有调试的 bochs 之后,我们会看到bochs 会进入一个选项界面,我们选择『6.Begin simulation』就可以开始调试了
##部分 Bochs 调试指令
行为 | 指令 | 举例 |
---|---|---|
在某物理地址设置断点 | b addr | b 0x7c00 |
显示当前所有断点信息 | info break | info break |
继续执行,直至遇到断点 | c | c |
单步执行 | s | s |
单步执行(遇到函数跳过) | n | n |
查看寄存器信息 | info cpu r fp sreg creg |
info cpu r fp sreg cre |
查看堆栈 | print-stack | print-stack |
查看内存物理地址内容 | xp /nuf addr | xp /40bx 0x9013e |
查看线性地址内容 | x /nuf addr | x /40bx 0x13e |
反汇编一段内存 | u start end | u 0x30400 0x3040d |
反汇编执行的每一条指令 | trace-on | trace-on |
每执行一条指令就打印 CPU 信息 | trace-reg | trace-reg |
- 我们可以使用 help 来查看调试帮助
##举例
采用上一篇文章中的镜像来进行调试
1 | <bochs:1> b 0x7c00 |