Bochs 的调试命令
h|help - 显示所有指令列表
h|help 指令 - 显示指定指令的帮助信息
-*- 调试器控制 -*-
help
显示所有指令列表
q|quit|exit
退出虚拟机
instrument
使用指定命令调用 BX_INSTR_DEBUG_CMD 回调
instrument <命令>
trace
trace on - 执行每条指令时显示指令的反汇编代码
trace off - 禁用指令跟踪
trace-reg
trace-reg on - 执行每条指令之前打印所有寄存器的内容
trace-reg off - 禁用寄存器状态跟踪
trace-mem
trace-mem on - 打印指令执行期间发生的所有内存访问
trace-mem off - 禁用内存访问跟踪
u|disasm
u|disasm [/数量] <起始位置> <结束位置> - 反汇编指定线性地址的指令
选项 '数量' 是反汇编指令的数量
u|disasm switch-mode - 在 Intel 和 AT&T 反汇编语法之间切换
u|disasm hex on/off - 控制 disasm 的偏移和位移格式
u|disasm size = n - 告诉调试器在使用 "disassemble" 命令时要使用的段大小[16|32|64]
ldsym
从文件加载符号
ldsym [全局] <文件名> [偏移量]
slist
列出以指定字符串开头的符号(与 'info symbols' 相同)
slist [字符串]
-*- 执行控制 -*-
c|cont|continue
继续运行
s|step
单步进入
p|n|next
单步跳过
modebp
切换“模式更改”中断的状态
开启后,实模式与保护模式之间切换时触发
vmexitbp
切换“虚拟机退出”中断的状态
开启后,虚拟机退出时触发
-*- 断点管理 -*-
vb|vbreak
用虚拟地址下断点
vb 0x700:0xc00
lb|lbreak
用线性地址下断点
lb 0x700:0xc00 | vb 0x7c00
pb|pbreak|b|break
用物理地址下断点
b 0x700:0xc00 | vb 0x7c00
sb
从当前指令开始,再执行指定条指令后中断
sb 10
sba
从首个指令开始,共执行指定条指令后中断
sb 10
blist
列出所有断点,相当于 info b
bpe
启用指定编号的断点
bpe 1
bpd
禁用指定编号的断点
bpd 1
d|del|delete
删除指定编号的断点
d 1
watch
watch 显示当前所有读写断点
watch read 0x7c00 设置读断点(当指定地址发生读取操作时中断)
watch write 0x7c00 设置写断点(当指定地址发生写入操作时中断)
watch stop|continue 开关选项,当遇到读写断点时是中断还是提示并继续
unwatch
unwatch 清除当前所有读写断点
unwatch read 0x7c00 清除读断点
unwatch write 0x7c00 清除写断点
-*- CPU 和内存相关 -*-
x
查看线性内存某地址指定长度的内容
x /长度 地址
长度后面可以跟 x,d,u,o,t,c 表示以“16进制、10进制、无符号数、8进制、2进制、字符”格式显示
长度后面可以跟 b,h,w 表示以“单字节、双字节、四字节”格式显示
长度后面可以跟 m 表示以“紧凑的十六进制”格式显示
本次设置会影响下次的 x 命令
xp
查看物理内存某地址的内容,用法同 x
x /长度 地址
setpmem
设置物理内存某地址的内容,数据大小只能是 1、2、4 字节
setpmem <地址> <数据大小> <值>
writemem
将指定线性地址开始的指定长度的内容写入文件
writemem <文件名> <线性地址> <字节数>
crc
显示两个地址之间的数据的 crc 校验值
crc <起始地址> <结束地址>
info
info break - 显示断点信息
info cpu - 显示所有 cpu 寄存器的转储
info idt - 显示中断描述符表
info ivt - 显示中断向量表
info gdt - 显示全局描述符表
info tss - 显示当前任务状态段
info tab - 显示页面表
info eflags - 显示已解码的 EFLAGS 寄存器
info symbols [字符串] - 列出以指定字符串开头的符号
info device - 显示此命令支持的设备列表
info device [字符串] - 显示指定设备的状态
info device [字符串] [字符串] - 显示带选项的指定设备的状态
r|reg|regs|registers
列出 CPU 寄存器及其内容
fp|fpu
显示 FPU 状态
mmx
显示 MMX 状态
sse
显示 SSE 状态
sreg
列出段寄存器
dreg
列出调试寄存器
creg
列出控制寄存器
page
显示线性地址所在页面到物理页面的映射
page 0x7c00
set
set <寄存器名> = <表达式> - 设置寄存器的值
set eflags = <表达式> - 设置 eflags 的值,并非所有标志都可以修改
set $cpu = <N> - 在 SMP 模拟中“将调试器控制”移动到 cpu <N>
set $auto_disassemble = 1 - 设置调试器在每次执行停止时反汇编当前指令
set u|disasm|disassemble on - 与'set $auto_disassemble = 1'相同
set u|disasm|disassemble off - 与'set $auto_disassemble = 0'相同
ptime
显示当前时间(自模拟开始以来的 tick 数)
print-stack
打印栈顶以下指定个数的 word 数据,默认 16 个
print-stack <word 数>
?|calc
计算表达式并显示结果。
calc <表达式>
'expr' 可以引用任何通用寄存器、opmask 寄存器和 段寄存器,可以使用任何算术和逻辑运算。
也支持特殊的 ':' 运算符来计算地址,比如实模式和 v86 模式下的“段:偏移”地址,或保护模式下的“选择子:偏移”地址。
-*- 使用 bochs 参数树 -*-
show "param"
show <命令> - 切换指定“符号信息”的显示
show - 显示当前的 show 模式
show mode - 当处理器切换模式时显示信息
show int - 当发生中断时显示信息
show softint - 当发生软件中断时显示信息
show extint - 当发生外部中断时显示信息
show call - 当发生 call 时显示信息
show iret - 当发生 iret 时显示信息
show all - 打开所有“符号信息”的显示
show off - 关闭“符号信息”的显示
show dbg_all - 打开所有 bx_dbg 标志
show dbg_none - 关闭所有 bx_dbg 标志
restore
从文件中恢复 bochs 的 root 参数
restore <参数名> [路径]
比如:
restore "cpu0" - 从当前目录的 "cpu0" 文件中恢复 CPU #0
restore "cpu0" "/save" - 从 "/save" 目录的 "cpu0" 文件中恢复 CPU #0