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,默认为1
- p/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个字节的内容为val
- r/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: 显示线性地址到物理地址的映射