在学习《Linux内核完全注释》时,为了方便,直接使用了赵博提供的linux-0.11-devel-040923.zip来debug,帮助理解代码。
后来又在哈工大的网站上发现了他们操作系统课程的实验,同样是关于Linux 0.11版本的。
后来在使用的过程中,我发现赵博使用的是bochs 2.1.1,而哈工大的oslab使用的是bochs 2.3.7版本。两者的debug指令有几个差别:
操作 | 2.1.1 | 2.3.7 |
---|---|---|
显示通用寄存器状态 | info r | r |
显示CPU状态 | info cpu | dump_cpu |
查看段选择符状态 | sreg | dump_cpu |
查看控制寄存器状态 | creg | dump_cpu |
除了最新版本增加了几个debug指令外,其他都相同。
这里再列举出几个重要的debug指令:
操作 | 指令 | 举例 |
---|---|---|
连续执行 | c | |
单步执行 | s [count] | s 10 |
打印栈 | print-stack [num words] | print-stack 10 |
查看数据段内容 | x /[nuf] [addr] | x /4x ds:0x1918a |
在物理地址上设置断点 | b [addr] | b 0x641c |
在虚拟地址上设置断点 | vb [seg:addr] | vb 0x0000:0x7c00 |
查看断点 | info b | info b |
删除断点 | delete [n] | delete 1 |
查看从当前指令开始的给定行数的反汇编 | u /[n] | u /100 |
对给定的线性地址范围内的指令进行反汇编 | u [start] [end] | u 0x7410 0x7450 |
更详细的指令说明请参考bochs的debugger指令说明