基本调试指令

  • b[reak] address

    • 功能:设置断点。
    • 示例:在地址 0x00100000 处设置断点。
      1. b 0x00100000
  • d[ebug] [on|off]

    • 功能:打开或关闭调试模式。
    • 示例:打开调试模式。
      1. d on
  • h[elp] [command]

    • 功能:显示调试器命令的帮助信息。
    • 示例:显示断点命令的帮助信息。
      1. h b
  • q[uit]

    • 功能:退出调试器。
    • 示例:退出调试器。
      1. q

执行控制指令

  • c[ontinue]

    • 功能:继续执行,直到下一个断点或终止。
    • 示例:继续执行程序。
      1. c
  • s[tep]

    • 功能:执行一条指令,然后停在下一条指令处。
    • 示例:单步执行一条指令。
      1. s
  • n[ext]

    • 功能:执行一条指令,但如果当前指令是 CALL,则不进入被调用的子程序。
    • 示例:执行下一条指令,不进入子程序。
      1. n

反汇编指令

  • u[nassemble] [address]
    • 功能:反汇编代码。
    • 示例:反汇编从当前地址开始的指令,或者从指定地址开始的指令。
      1. u
      2. u 0x00100000

寄存器操作指令

  • r[egisters]

    • 功能:显示所有通用寄存器的当前值。
    • 示例:显示当前通用寄存器的值。
      1. r
  • r[egisters] register value

    • 功能:设置指定寄存器的值。
    • 示例:将 EAX 寄存器设置为 0x12345678。
      1. r eax 0x12345678
  • sreg

    • 功能:显示所有段寄存器的值。
    • 示例:显示当前段寄存器的值。
      1. sreg
      2. sreg cs
  • creg

    • 功能:显示所有控制寄存器的值。
    • 示例:显示当前控制寄存器的值。
      1. creg
      2. creg cr0
  • dreg

    • 功能:显示所有调试寄存器的值。
    • 示例:显示当前调试寄存器的值。
      1. dreg
      2. dreg dr0

内存操作指令

  • x[amine] address [length]

    • 功能:显示内存内容。
    • 示例:显示从地址 0x00100000 开始的 16 字节内存内容。
      1. x 0x00100000 16
  • m[emory] address [length]

    • 功能:类似于 x[amine],但输出格式不同。
    • 示例:显示从地址 0x00100000 开始的 16 字节内存内容。
      1. m 0x00100000 16
  • w[rite] address value

    • 功能:将指定值写入内存。
    • 示例:将 0xFF 写入地址 0x00100000。
      1. w 0x00100000 0xFF

输入/输出操作指令

  • i[nport] port

    • 功能:读取指定端口的值。
    • 示例:读取端口 0x3F8 的值。
      1. i 0x3F8
  • o[utport] port value

    • 功能:向指定端口写入值。
    • 示例:将 0xFF 写入端口 0x3F8。
      1. o 0x3F8 0xFF

磁盘操作指令

  • disk_image_info

    • 功能:显示加载的磁盘镜像的信息。
    • 示例:显示当前加载的磁盘镜像信息。
      1. disk_image_info
  • load_image file

    • 功能:加载磁盘镜像文件。
    • 示例:加载磁盘镜像文件 mydisk.img。
      1. load_image mydisk.img
  • save_image file

    • 功能:保存当前磁盘镜像状态。
    • 示例:将当前磁盘状态保存到文件 savedisk.img。
      1. save_image savedisk.img

其他常用指令

  • info

    • 功能:显示当前的系统信息,例如 CPU、内存状态等。
    • 示例:显示系统信息。
      1. info
  • log

    • 功能:控制日志记录和显示。
    • 示例:开始记录日志。
      1. log
  • trace [on|off]

    • 功能:设置或清除跟踪标记,用于指令跟踪。
    • 示例:打开指令跟踪。
      1. trace on
  • keyboard

    • 功能:模拟键盘输入。
    • 示例:输入键盘命令。
      1. keyboard

示例使用

  1. 设置断点并查看寄存器

    1. b 0x00100000
    2. c
    3. r
  2. 查看段寄存器

    1. sreg
    2. sreg cs
  3. 查看控制寄存器

    1. creg
    2. creg cr0
  4. 查看调试寄存器

    1. dreg
    2. dreg dr0
  5. 反汇编代码

    1. u
    2. u 0x00100000
  6. 查看内存内容并修改

    1. x 0x00100000 16
    2. w 0x00100000 0xFF
    3. x 0x00100000 16
  7. 执行单步操作

    1. s
    2. r
    3. s

总结

Bochs 调试器提供了丰富的调试命令,涵盖断点设置、执行控制、反汇编代码、寄存器和内存操作、I/O 端口操作以及磁盘操作等多个方面。通过合理使用这些指令,可以有效地调试和分析虚拟机中的操作系统和应用程序。虽然 s 命令用于单步执行指令,但可以使用 u 命令来反汇编代码。详细的命令列表和使用说明可以参考 Bochs 的官方文档和用户手册。