基本调试指令
b[reak] address
- 功能:设置断点。
- 示例:在地址 0x00100000 处设置断点。
b 0x00100000
d[ebug] [on|off]
- 功能:打开或关闭调试模式。
- 示例:打开调试模式。
d on
h[elp] [command]
- 功能:显示调试器命令的帮助信息。
- 示例:显示断点命令的帮助信息。
h b
q[uit]
- 功能:退出调试器。
- 示例:退出调试器。
q
执行控制指令
c[ontinue]
- 功能:继续执行,直到下一个断点或终止。
- 示例:继续执行程序。
c
s[tep]
- 功能:执行一条指令,然后停在下一条指令处。
- 示例:单步执行一条指令。
s
n[ext]
- 功能:执行一条指令,但如果当前指令是 CALL,则不进入被调用的子程序。
- 示例:执行下一条指令,不进入子程序。
n
反汇编指令
- u[nassemble] [address]
- 功能:反汇编代码。
- 示例:反汇编从当前地址开始的指令,或者从指定地址开始的指令。
u
u 0x00100000
寄存器操作指令
r[egisters]
- 功能:显示所有通用寄存器的当前值。
- 示例:显示当前通用寄存器的值。
r
r[egisters] register value
- 功能:设置指定寄存器的值。
- 示例:将 EAX 寄存器设置为 0x12345678。
r eax 0x12345678
sreg
- 功能:显示所有段寄存器的值。
- 示例:显示当前段寄存器的值。
sreg
sreg cs
creg
- 功能:显示所有控制寄存器的值。
- 示例:显示当前控制寄存器的值。
creg
creg cr0
dreg
- 功能:显示所有调试寄存器的值。
- 示例:显示当前调试寄存器的值。
dreg
dreg dr0
内存操作指令
x[amine] address [length]
- 功能:显示内存内容。
- 示例:显示从地址 0x00100000 开始的 16 字节内存内容。
x 0x00100000 16
m[emory] address [length]
- 功能:类似于
x[amine]
,但输出格式不同。 - 示例:显示从地址 0x00100000 开始的 16 字节内存内容。
m 0x00100000 16
- 功能:类似于
w[rite] address value
- 功能:将指定值写入内存。
- 示例:将 0xFF 写入地址 0x00100000。
w 0x00100000 0xFF
输入/输出操作指令
i[nport] port
- 功能:读取指定端口的值。
- 示例:读取端口 0x3F8 的值。
i 0x3F8
o[utport] port value
- 功能:向指定端口写入值。
- 示例:将 0xFF 写入端口 0x3F8。
o 0x3F8 0xFF
磁盘操作指令
disk_image_info
- 功能:显示加载的磁盘镜像的信息。
- 示例:显示当前加载的磁盘镜像信息。
disk_image_info
load_image file
- 功能:加载磁盘镜像文件。
- 示例:加载磁盘镜像文件 mydisk.img。
load_image mydisk.img
save_image file
- 功能:保存当前磁盘镜像状态。
- 示例:将当前磁盘状态保存到文件 savedisk.img。
save_image savedisk.img
其他常用指令
info
- 功能:显示当前的系统信息,例如 CPU、内存状态等。
- 示例:显示系统信息。
info
log
- 功能:控制日志记录和显示。
- 示例:开始记录日志。
log
trace [on|off]
- 功能:设置或清除跟踪标记,用于指令跟踪。
- 示例:打开指令跟踪。
trace on
keyboard
- 功能:模拟键盘输入。
- 示例:输入键盘命令。
keyboard
示例使用
设置断点并查看寄存器:
b 0x00100000
c
r
查看段寄存器:
sreg
sreg cs
查看控制寄存器:
creg
creg cr0
查看调试寄存器:
dreg
dreg dr0
反汇编代码:
u
u 0x00100000
查看内存内容并修改:
x 0x00100000 16
w 0x00100000 0xFF
x 0x00100000 16
执行单步操作:
s
r
s
总结
Bochs 调试器提供了丰富的调试命令,涵盖断点设置、执行控制、反汇编代码、寄存器和内存操作、I/O 端口操作以及磁盘操作等多个方面。通过合理使用这些指令,可以有效地调试和分析虚拟机中的操作系统和应用程序。虽然 s
命令用于单步执行指令,但可以使用 u
命令来反汇编代码。详细的命令列表和使用说明可以参考 Bochs 的官方文档和用户手册。