Bochs调试Linux内核

总结:cmd进入Bochs安装路径后运行如下命令bochsdbg  -q -f bochsrc.bxrc

调试的命令主要包括:

vbreak  地址 打断点,配合c执行到该地址

info r                                  # 查看当前CPU寄存器的内容(例如:info eflags)
u /10                                    # 反汇编从当前地址开始的10条指令。
print-stack                            # 显示当前堆栈的内容
dump_cpu                               # 显示CPU中的所有寄存器和状态值
lb 0xd1ec                              # 设置线性地址断点。
c                                      # 连续执行。
s   (step)                          # 单步执行。

之所以能用Bochs调试Linux内核,还是因为Bochs做了一些工作;

安装完成以后如下;如果使用bochs.exe加载操作系统映像,就是在虚拟机中运行操作系统;

如果使用bochsdbg.exe加载操作系统映像,就同时附带有调试命令,可进行调试;

 

如下图,.bxrc文件,是欲加载的操作系统映像的配置文件;我这个是Bochs 2.5自带的;

此目录下有run.bat;原内容如下;

cd "C:\Program Files (x86)\Bochs-2.5\dlxlinux"
..\bochs -q -f bochsrc.bxrc

修改为如下;

"C:\Program Files (x86)\Bochs-2.5\bochsdbg" -q -f bochsrc.bxrc

然后运行run.bat;出现下图;Display面板为空;命令行显示 <bochs:1>;到此停住,即可进行调试;

 

打 help 查看调试命令;

 

查看vbreak命令的帮助;此命令在某个虚拟地址设置断点;

设一个断点在0x7c00;

 

0x7C00的定义
BIOS就是将MBR读入0x7C00地址,然后进行后续的引导的。
操作系统或是bootloader开发者必须假设 他们的汇编代码被加载并从0x7C00处开始执行。
对于这个地址,它不属于Intel x86平台规范的,而是属于BIOS规范中定义的内容。

回车再输入c之后运行;

 

此时Display面板出现下图然后停住;

 

命令行显示中断在 0000:7c00;

但是我的输出和网上资料有所不同;我的输出显示在7c00处是一条汇编cli指令;根据资料到此应该显示类似如下内容;

<bochs:3> vbreak 0x0000:0x7c00
<bochs:4> c
(0) Breakpoint 1, 0x7c00 (0x0:0x7c00)
Next at t=4409138
(0) [0x00007c00] 0000:7c00 (unk. ctxt): mov ax, 0x7c0             ; b8c007
<bochs:5>

下回再搞;

然后可以打 u /10,反汇编从此地址开始的10条指令;

 

我的没有 info r 命令;

 

这个是查看寄存器;可以查看eflags寄存器;

可以打印当前堆栈;

 

可以打 n 逐条执行指令;

 

看上去可以进行调试了,目前还不了解bxrc文件里面的配置;
————————————————
版权声明:本文为优快云博主「bcbobo21cn」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/bcbobo21cn/article/details/105314444

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值