Bochs 的调试命令

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
 

上一篇:OS实验 : 用NASM编写MBR引导程序,在BOCHS虚拟机中测试


下一篇:8.5 仅适用于Win32的磁盘镜像操作工具