info用于查看各种数据,tab表示页表
所示为虚拟地址映射情况:
左边是32为位虚拟地址范围,右边是虚拟地址对应的物理地址。
用 b h w g 来表示”显示单元的大小,bochs中字为2个字节。
b 一个字节
h 半个字,2个字节
w 一个字,4个字节
g 双字,8个字节
bochs 支持 八进制 011,十进制11,十六进制0x11。十六进制只支持0x前缀,不支持h后缀。
- 指令
xp / nuf <addr>
xp / x 查看内容是以 "显示单元“为单位,默认4字节。
n 指要显示的“显示单元”数
u “显示单元”大小
f 用什么进制
比方
xp /b 0x7c00
xp /w 0x0
xp 0x7c00
xp/2 0xffff0
<bochs:4> xp/2 0xffff0
[bochs]:
0x00000000000ffff0 <bogus+ 0>: 0x00e05bea 0x2f3130f0
- 指令
u / disasm [/num] [start] [end]
,后面跟上需要汇编的指令书、起始线性地址、终止线性地址。
<bochs:5> u/1 0xffff0
00000000000ffff0: ( ): jmpf 0xf000:e05b ; ea5be000f0
- "Debugger control "类
- show mode :每次CPU变换模式时就提示。
- show int:每次有中断时就提示,同时显示三种中断类型: softint软件主动触发的中断,extint来自外部设备的中断、iret只显示iretd指令有关的信息。
- show call :每次有函数调用发生时就会提示。
- traceon | off 如果该项设on,每次执行一条指令,bochs都会将反汇编代码打印到控制台,这样单步调试时免得看源码了。
-
**“Execution control" 类 **
c | cont |} continue ,左边列出的三个命令都是向下继续执行,若没有断点则一直执行。
s | step [count ]执行 count 条指令,count是单步执行的指令数。
p | n | next 执行1条指令,若是函数调用,则把函数当作一整体执行。最常用n。 -
”Breakpoint management" 类
以地址打断点:
vb | vbreak [seg: off] 以虚拟地址增加断点。 vb
lb | lbreak [addr] 以线性地址添加断点。 lb
pb | pbreak | b | break [addr] 以物理地址添加断点。 b
以指令数打断点:
sb [delta] delta 表示增量。再执行 delta数条指令就中断。
sba [time] cpu从运行开始,执行time条指令时中断,从0开始的指令数。
以读写IO打断点:
watch 子命令
watch r|read [phy_addr] 设置读断点,如果物理地址phy_addr 有读操作停止运行。
watch w|write [phy_addr] 设置些断点,如果物理地址 phy_addr 有写操作停止运行。
watch显示所有读写断点。
unwatch 清除所有断点
unwatch [phy_addr]清除在此地址上的读写断点
blist 显示所有断点信息, 功能等同于 info b
bpd | bpe [n] 禁用断点 / 启用断点,n是断点号。
d|del|delete [n] ,删除某断点,n是断点号 -
CPU and memory contents"类
x/ nuf [line_addr]显示线性地址内容,n、u、f 是三个参数。
n 是“显示单元” 的大小
f 是显示格式
- x 16进制
- d 10进制
- u 无符号10
- o 8
- t 2
- c字符
- s ASCII显示
- i instr 显示
xp / nuf [phy_addr]
显示物理地址 phy_addr 处的内容,注意与x区分,x是线性地址。
setpmem [phy_addr] [ size] [val]
设置以phy_addr为起始,连续size个字节为内容的val。size最多设置 4 个字节宽度的数据,大于4会报错。小于等于4正确。 setpmem 0x7c00 4 0x9
。
r | reg | regs | registers
任意四个命令之一 便可以显示8个通用寄存器的值+eflags寄存器+eip寄存器。
ptime
显示 bochs启动后,总执行指令数。
print-stack [num]
显示堆栈,num默认为 16,表示打印的栈条目数。输出的栈,栈顶在上,低地址在上,高地址在下,与栈的实际方向相反,需要注意。
? | calc
内置的计算器。
info 是个指令族:
info pb | pbreak | b | break
查看断点信息。
info CPU
显示CPU所有寄存器的值,包括不可见。
info idt
显示中断向量表 IDT。
info gdt [num]
显示全局描述符表 GDT。
info ldt
显示局部描述符吧 LDT
info tss
显示任务状态段 TSS。
info ivt [num]
显示中断向量表 IVRT。
info flags | eflags
显示状态寄存器。
sreg
显示所有段寄存器值
dreg
显示所有调试寄存器值
creg
显示所有控制寄存器的值
info tab
显示页表中线性地址到物理地址的映射
page line_addr
显示线性地址到物理地址的映射