Bochs调试内核

本文分享了作者在自制操作系统内核过程中使用Bochs调试的经验。通过将内核开发视为单片机程序来逐步实现功能,并利用Bochs的断点、单步执行等功能定位和解决bug,最终成功实现了大部分功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

       多少操作系统爱好者在自制操作系统过程中,参考例如《30自制操作系统》或者《一个Oranges操作系统的设计与实现》,又或者参考linux-0.1.1编写一个简单的内核时,一定要使用bochs的调试功能,其调试指令与gdb差不多。例如我三次尝试参考上面的书探索一下操作系统的实现过程,基本总是抄写书上的代码,一旦自己写几句汇编代码,就出bug了,然后然后就是把书上的代码看懂了,执行一遍......基本没有达到自己写一个内核要求。最后发现原因在于总是把它当成一个操作系统来编写,遇到bug了,就参考原来书上是如何实现的,到第四次尝试写一个玩具内核时,就按照每一步需要什么功能了,按照自己的想法编写,按最简单的方式来,当成一个单片机程序来对待,遇到bug了,不参考书上的代码了,使用bochs调试,这样就达到了内核基本是自己编写的,与其他内核每一个环节的目的是一样的,但是方式不同了。

bochs内核调试常用指令:

       环境搭建就不说了,在当前文件的Makefile里边添加一个宏,例如:
.PHONY
bochs:
     bochs(前面是tab)
当然也得有一个bochsrc在当前目录下。

b:设置断点

b 0x7c00
在地址0x7c00处设置一个断点。

blist:查看设置了哪些断点

直接执行blist即可。

d:删除断点       

d 1
在使用blist查看设置的断点后,其前面有一个编号1、2、 3,即可使用d 1删除第一个断点
关于断点的设置与取消,上面三个已经够用了。
----------------------------------------------------------------------------------------------------------------------

c:全速执行

在最开始设置断点b 0x7c00后,可使用>>c ,执行到0x7c00处暂停。

s或者s n:执行一步或者n步

直接执行>>s ,就是只执行一步,一步是按照汇编上来讲(可反汇编后查看每一步),一步太慢,也可使用例如>>s 2 ,执行2步。

r/creg/sreg:查看相关类型的寄存器

      具体查看的是什么寄存器,可具体看看,指令非常简单

xp /5bx 0:

     上面这个指令只是一个简单的使用,其中:
5:表示查看5个byte数据
0:表示要查看的地址
这个xp指令是查看的物理地址的,还有一个x表示查看线性地址的数据
具体可参考其他blog即可。













评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值