【从头开始写操作系统系列】使用 Bochs 调试操作系统
2015-08-04 13:04
441 查看
在上一篇文章《环境搭建以及第一个Hello-World》中,笔者讲了如何安装 bochs 以及运行一个 helloworld 操作系统,但是使用上一篇文章中的方法安装的 bochs 是不支持调试的,下面我讲介绍如何使用源码编译的方法来安装 bochs,以及使用 bochs 来调试操作系统。
http://sourceforge.net/projects/bochs/files/bochs/2.6.8/
解压之后进入该目录,进行配置
编译安装
这时,bochs 就编译安装完成了,接下来我们继续使用上一篇文章中所使用的软盘映像。
[thead]
- 我们可以使用 help 来查看调试帮助
版权声明:本文为博主原创文章,未经博主允许不得转载。
文章来源:http://blog.luoyuanhang.com
编译安装 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 |
举例
采用上一篇文章中的镜像来进行调试<bochs:1> b 0x7c00 <bochs:2> c 00000003305i[BIOS ] $Revision: 1.257 $ $Date: 2011/01/26 09:52:02 $ …… 00014041008i[BIOS ] Booting from 0000:7c00 (0) Breakpoint 1, 0x00007c00 in ?? () Next at t=14041069 (0) [0x000000007c00] 0000:7c00 (unk. ctxt): mov ax, cs ; 8cc8 <bochs:4> x /64xb 0x7c00 [bochs]: 0x00007c00 <bogus+ 0>: 0x8c 0xc8 0x8e 0xd8 0x8e 0xc0 0xe8 0x02 0x00007c08 <bogus+ 8>: 0x00 0xeb 0xfe 0xb8 0x1e 0x7c 0x89 0xc5 0x00007c10 <bogus+ 16>: 0xb9 0x0d 0x00 0xb8 0x01 0x13 0xbb 0x0c 0x00007c18 <bogus+ 24>: 0x00 0xb2 0x00 0xcd 0x10 0xc3 0x48 0x65 0x00007c20 <bogus+ 32>: 0x6c 0x6c 0x6f 0x2c 0x20 0x77 0x6f 0x72 0x00007c28 <bogus+ 40>: 0x6c 0x64 0x21 0x00 0x00 0x00 0x00 0x00 0x00007c30 <bogus+ 48>: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00007c38 <bogus+ 56>: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 <bochs:5> n Next at t=14041070 (0) [0x000000007c02] 0000:7c02 (unk. ctxt): mov ds, ax ; 8ed8 <bochs:6> trace-reg on Register-Tracing enabled for CPU0 <bochs:7> n Next at t=14041071 eax: 0x00000000 0 ecx: 0x00090000 589824 edx: 0x00000000 0 ebx: 0x00000000 0 esp: 0x0000ffd6 65494 ebp: 0x00000000 0 esi: 0x000e472c 935724 edi: 0x0000ffac 65452 eip: 0x00007c04 eflags 0x00000082: id vip vif ac vm rf nt IOPL=0 of df if tf SF zf af pf cf (0) [0x000000007c04] 0000:7c04 (unk. ctxt): mov es, ax ; 8ec0 <bochs:8> c ……
版权声明:本文为博主原创文章,未经博主允许不得转载。
文章来源:http://blog.luoyuanhang.com
相关文章推荐
- 通过TortoiseGit来使用Github或Visual Studio Online版本控制管理
- hdu 1885 Key Task(状态压缩+bfs)
- 猫猫学iOS 之微博项目实战(8)用AFNetworking和SDWebImage简单加载微博数据
- 亿条数据在PHP中实现Mysql数据库分表100张
- pdf转换成html具体怎么转
- 数理逻辑资源
- 为QML动态生成Tab
- SecureCRT 上传和下载文件到服务器和本地
- python遇到‘\u’开头的unicode编码
- COOKIE和SESSION关系和区别
- 最速下降法(梯度下降法)
- lambda算子
- IGMP协议
- WPF 资源转载
- 如何掌握函数式编程
- NSIS 学习(1)——安装包打开后主界面显示背景图片(使用向导创建)
- Spring的多事务配置(多个Transaction Manager)和使用方法
- 【程序员眼中的统计学(6)】几何分布、二项分布及泊松分布:坚持离散
- server backup 2008/2012的多任务备份计划
- JavaScript数组各种常见用法实例分析