bochs调试

bochs 调试

基本操作

行为 指令 举例
物理地址设置断点 b addr b 0x30400
显示当前所有断点信息 info break info break
继续执行,直到遇到断点 c c
单步执行 s s
单步执行(遇到函数跳过) n n
查看寄存器信息 info cpu info cpu
查看堆栈 print-stack print-stack
查看内存物理地址内容 xp /nuf addr xp /40bx 0x90
查看内存线性地址内容 xp /nuf addr xp /40bx 0x90
反汇编一段内存 u start end u 0x100 0x900
反汇编执行的每一条指令 trace-on trace-on
每执行一条指令就打印cpu信息 trace-reg trace-reg on

内存操作

x /nuf [addr] 显示线性地址的内容

xp /nuf [addr] 显示物理地址的内容

  • n 显示的单元数
  • u 每个显示单元的大小,u可以是下列之一:
  • b BYTE
  • h WORD
  • w DWORD
  • g DWORD64

注意: 这种命名法是按照GDB习惯的,而并不是按照inter的规范。

f 显示格式,f可以是下列之一:

  • x 按照十六进制显示
  • d 十进制显示
  • u 按照无符号十进制显示
  • o 按照八进制显示
  • t 按照二进制显示
  • c 按照字符显示

n、f、u是可选参数,如果不指定,则u默认是w,f默认是x。如果前面使用过x或
者xp命令,会按照上一次的x或者xp命令所使用的值。n默认为1。addr 也是一个
可选参数,如果不指定,addr是0,如过前面使用过x或者xp命令,指定了n=i,
则再次执行时n默认为i+1。

info命令

  • info program 显示程序执行的情况。
  • info registers|reg|r 显示寄存器的信息。
  • info pb|pbreak|b|break 相当于blist
  • info dirty 显示脏页的页地址。
  • info cpu 显示所有CPU寄存器的值。
  • info fpu 显示所有FPU寄存器的值。
  • info idt 显示IDT。
  • info gdt [num] 显示GDT。
  • info ldt 显示LDT。
  • info tss 显示TSS。
  • info pic 显示PIC。
  • info ivt [num] [num] 显示IVT。
  • info flags 显示状态寄存器。
  • info cr 显示CR系列寄存器。
  • info symbols 显示symbol信息。
  • info ne2k|ne2000 显示虚拟的ne2k网卡信息。

其他指令

  • trace-on|trace-off Tracing开关打开后,每执行一条指令都会将反汇编的结果
    显示出来。
  • ptime 显示Bochs自本次运行以来执行的指令条数。
  • sb [val] 再执行val条指令就中断。val是64-bit整数,以L结尾,形如“1000L”
  • sba [val] 执行到Bochs自本次运行以来的第val条指令就中断。val是64-bit整数,以L结尾,形如“1000L”
  • modebp 设置切换到v86模式时中断。
  • record [“filename”] 将输入的调试指令记录到文件中。文件名必须包含引号。
  • playback [“filename”] 回放record的记录文件。文件名必须包含引号。
  • print-stack [num] 显示堆栈,num默认为16,表示打印的条数。
    ?|calc 和WinDBG的“?”命令类似,计算表达式的值。
  • load-symbols [global] filename [offset]
    载入符号文件。如果设定了“global”关键字,则符号针对所有上下文都有效。offset会默认加到所有的symbol地址上。symbol文件的格式为:”%x %s”。

反汇编指令

u|disas|disassemble [/num] [start] [end]

反汇编物理地址start到end 之间的代码,如
果不指定参数则反汇编当前EIP指向的代码。

num是可选参数,指定处理的代码量。

set $disassemble_size = 0|16|32 $disassemble_size

变量指定反汇编使用的段
大小。

set $auto_disassemble = 0|1 $auto_disassemble

决定每次执行中断下来的
时候(例如遇到断点、Ctrl-C等)是否反汇
编当前指令。

寄存器操作

set $reg = val 

设置寄存器的值。现在版本可以设置的寄存器包括:

eax ecx edx ebx esp ebp esi edi

暂时不能设置:
eflags cs ss ds es fs gs

r|reg|registers reg = val 

同上。

dump_cpu 显示完整的CPU信息。

set_cpu 设置CPU状态,这里可以设置dump_cpu所能显示出来的所有CPU状态。

猜你喜欢

转载自blog.csdn.net/yzr1183739890/article/details/71435855