bochs调试
bochs的硬件调试体现在:
- 调试时可以查看页表、gdt、idt等数据结构
- 可以查看栈中数据
- 可以反汇编任意内存
- 实模式、保护模式互相变换时提醒
- 中断发生时提醒
调试命令大体分为四类:
Debugger Control
q
退出、set
设置寄存器的值、ctrl + c
中断执行show mode
每当CPU变换模式时就提醒show int
每当中断就提示,三种中断类型:softint
: 软件主动触发的中断extint
: 来自外部设备的中断iret
: 只显示iretd
指令有关的信息
show call
: 每当有函数调用时提示
Execution Control
c/cont/continue
:继续执行,若没断点一直运行下去s/step [count]
:单步执行,若无count,默认为1p/n/next
:执行一条指令,若是函数调用,则把函数当成整体执行
Breakpoint management
给地址加断点
vb/vbreak [seg:off]
给虚拟地址加断点(段:段内偏移)lb/lbreak
给线性地址加断点pb/pbreak/b/break [addr]
给物理地址加断点
给指令数加断点
sb [delta]
: delta表示增量,再执行delta条指令中断sba [time]
: CPU从运行开始,执行第time条指令时中断,从0开始的指令数
以读写IO加断点
watch r/read [phy_addr]
: 设置读断点,如果物理地址phy_addr有读操作则停止运行watch w/write [phy_addr]
: 设置写断点,如果物理地址phy_addr有写操作则停止运行watch/blist
: 显示所有读写断点/信息unwatch [phy_addr]
: 为空清除所有读写断点,否则清除phy_addr处的断点bpd/bpe [n]
:禁用断点或启用断点,n是断点号d/del/delete [n]
: 删除某断点,n是断点号
CPU and memory contents
x /nuf [line_addr]
:显示线性地址的内容xp /nuf [phy_addr]
:显示物理地址的内容setpmem [phy_addr][size] [val]
:设置以物理内存phy_addr为起始,连续size个字节的内容为valr/reg/regs/registers
: 查看8个寄存器的值+eflags寄存器+eip寄存器print-stack [num]
显示堆栈,默认16,表示打印的栈条目数info pb/CPU/fpu/idt/gdt/ldt/tss/ivt
: 断点、CPU、FPU、中断向量表、全局描述符表、局部描述符表、任务状态段、中断向量表info flags/eflags
:查看状态寄存器sreg/dreg/creg
: 显示所有段、调试、控制寄存器的值info tab
: 显示页表中线性地址到物理地址的映射page line_addr
: 显示线性地址到物理地址的映射