Bochs调试指令

来源:互联网 发布:哈利波特最后结局知乎 编辑:程序博客网 时间:2024/05/01 19:07
[执行控制]
c|cont                           向下执行,相当于WinDBG的"g"
s|step|stepi [count]    单步执行,相当于WinDBG的"t",count 默认为 1
p|n|next                       单步执行,类似于WinDBG的"p"

q|quit|exit                    退出调试,同时关闭虚拟机
Ctrl-C                           结束执行状态,返回调试器提示符
Ctrl-D                           if at empty line on command line, exit (至少在Windows版本中我没有发现Ctrl-D有什么功能)

[执行断点]
vb|vbreak [seg:off]                 在虚拟地址上下断点。
lb|lbreak [addr]                      在线性地址上下断点,相当于WinDBG的"bp"
pb|pbreak|b|break [addr]     在物理地址上下断点。(为了兼容GDB的语法,地址前可以加上一个"*")

blist                                           显示断点状态,相当于WinDBG的"bl"
bpd|bpe [num]                        禁用/启用断点,WinDBG的"be"和"bd"。num是断点号,可以用blist命令查询。
d|del|delete [num]                  删除断点,相当于WinDBG的"bc"。mum是断点号,可以用blist命令查询。

[读写断点]
watch read [addr]                   设置读断点
watch write [addr]                   设置写断点
unwatch read [addr]               清除读断点
unwatch write [addr]              清除写断点
watch                                        显示当前所有读写断点
unwatch                                   清除当前所有读写断点
watch stop|continue              开关选项,设置遇到读写断点时中断下来还是显示出来但是继续运行

[内存操作]
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。

setpmem [addr] [size] [val]    设置物理内存某地址的内容。需要注意的是,每次最多只能设置一个DWORD: 
    这样是可以的: 
        <bochs:1> setpmem 0x00000000 0x4 0x11223344 
        <bochs:2> x /4 0x00000000 
        [bochs]: 
        0x00000000 <bogus+       0>:    0x11223344 0x00000000 0x00000000 0x00000000 
    这样也可以: 
        <bochs:1> setpmem 0x00000000 0x2 0x11223344 
        <bochs:2> x /4 0x00000000 
        [bochs]: 
        0x00000000 <bogus+       0>:    0x00003344 0x00000000 0x00000000 0x00000000 
    或者: 
        <bochs:1> setpmem 0x00000000 0x1 0x20 
        <bochs:2> x /4 0x00000000 
        [bochs]: 
        0x00000000 <bogus+       0>:    0x00000020 0x00000000 0x00000000 0x00000000 
    下面的做法都会导致出错: 
        <bochs:1> setpmem 0x00000000 0x3 0x112233 
        Error: setpmem: bad length value = 3 
        <bochs:2> setpmem 0x00000000 0x8 0x11223344 
        Error: setpmem: bad length value = 8

crc [start] [end]     显示物理地址start到end之间数据的CRC。

[寄存器操作]
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状态。

[反汇编命令]
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等)是否反汇 
                                    编当前指令。


[其他命令] 
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"。


[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网卡信息。
0 0
原创粉丝点击