Bochs 调试命令笔记

一、控制 Debugger 的命令
1、q|quit|exit :退出Debugger 和 中止模拟器执行。
2、set

        (1)set  <regname> = <expr>:设置寄存器的值为‘expr’。

        (2)set $eflags = <expr>:设置eflags的值为‘expr’;但是不是所有标志位都能够设置。

        (3)set $cpu = <N>:在模拟SMP时,将Debugger控制的cpu设置为cpu<N>。

          (4)  set $auto_disassamebly=1:在每一次执行停止时,Debugger反汇编当前的准备执行的指令。 

        (5)set u|disassemble on:与set $auto_disassemble=1

        (6)set u|disassemble off:和set $auto_disassemble=0

3、instrument <command>:

        用<command>回调BX_INSTR_DEBUG_CMD指令。

4、show

        (1)show <command>:切换<command>执行结果显示信息的方式。

        (2)show:显示当前提示信息的显示模式(方式)。

        (3)show mode:处理器切换模式的时候显示提示。

        (4)show int:中断发生时显示提示。

        (5)show softint:软中断发生时显示提示。

        (6)show extint:外部中断发生时显示提示。

        (7)show call:调用发生时显示提示。

        (8)show iret:iret发生时显示提示。

          (9) show all:打开所有的提示信息显示功能。

        (10)show off:关闭所有的提示信息显示功能。

        (11)show dbg_all:打开所有bx_dbg 标志。

        (12)show dbg_none:关闭所有bx_dbg标志。

二、执行控制的命令

1、c|cont|continue:继续执行指令直到遇到中断。

2、c of “expression”:仅当表达式为真时继续执行指令。

3、s|step [count]:在当前处理器上执行#count条指令,默认是一条。

      s|step [cpu] <count>:在#cpu上执行#count条指令。

      s|step all <count>: 在所有cpu上执行#count条指令。

4、n|next|p:执行完一个子程序。

5、modebp:切换模式转换时的中断状态。即模式转换的时候程序是不是停下来。

6、vmexitbp:切换VMEXIT 转换时的否中断状态。

三、断点管理命令

1、vb|vbreak <seg:offset>:在虚拟地址<seg:offset>所在指令处设置中断点。

     vb|vbreak <seg:offset> if "expression" : 条件为真时在虚拟地址的指令处设置中断。

2、lb|lbreak <addr>:在线性地址<addr>的指令处设置中断。

      lb|lbreak <addr> if "expression":当条件为真时,在线性地址<addr>的指令处设置中断。

3、pb|pbreak|b|break <addr>:在物理地址<addr>的指令处设置中断点。

      pb <addr> if "expression":当条件为真时,在物理地址<addr>的指令处设置中断点。

4、sb <delta>:在将来#delta个指令周期时插入一条时间断点 。

5、sba <time>:在指定的时间插入断点。(在当前指令周期后,t=1058890,time>t才可用)

6、blist:列出所有断点。作用和info break命令相同。

7、bpe <N>:激活#N号中断。

8、bpd <N>:禁用#N号中断。

9、d|delete|del <N>:删除#N号中断。

10、watch:显示观察点的状态

        (1)watch stop:到观察点停下来。

        (2)watch continue:到达观察点不停。

        (3)watch r|read addr:在物理地址addr处插入一个读内存观察点。

        (4)watch w|write addr:在物理地址addr处插入一个写内存观察点。

        (5)watch r|read addr <len>:以物理地址addr开始#len长度的范围插入一个读内存观察点。

        (6)watch w|write addr <len>:以物理地址addr开始#len长度的范围插入一个写内存观察点。

        (7)unwatch:移除所有观测点。

        (8)unwatch addr:移除addr处的观察点。

四、cpu和内存的控制

1、x /nuf <addr>:检测内存线性地址addr处的值。

      xp /nuf <addr>:检测内存物理地址addr处的值。

      nuf:一个字母序列,其值和含义如下:

     内存数据显示格式:x--16进制格式显示,d--十进制格式显示,u--无符号数格式显示,o--八进制格式显示,t--二进制格式显示,c--字符格式显示,s--ascii格式显示,i--字符串格式显示。

     显示的数据的宽度:b--字节方式,h--2字节方式,w--4字节方式,g--系统定义的最大宽度。

     m--可供替代的显示输出格式(内存转储)

2、setpmem <addr> <datasize> <val>:以<datasize>的格式将物理内存<addr>处的值设置为<val>。

3、writemem <filename> <laddr> <len>:将从虚拟地址<laddr>开始的<len>字节的内存中的内存转储到文件<filename>中。

4、crc <addr1> <addr2>:显示物理内存<addr1>到<addr2>范围的crc值。

5、info

        (1)info break:和blist相同。

        (2)info cpu:显示所有cpu的寄存器数据。

          (3)   info idt:显示中断描述符表。

        (4)info ivt:显示中断向量表。

        (5)info gdt:显示全局描述符表。

        (6)info tss:显示当前任务状态段。

        (7)info tab:显示页表。

        (8)info eflags:显示eflags寄存器的状态(以解码后的形式展现)。

        (9)info symbols [string]:列出以[string]开头的符号。

        (10)info device:列出此命令支持的设备。

                   info device [string]:显示指定设备的[string]指示子设备的状态。

                   info device [string] [string]: 显示子设备的状态。

6、r|reg|regs|registers:列出cpu的寄存器和寄存器里面的内容。和info r命令相同。

7、fp|fpu:列出fpu的内容。

8、mmx:列出mmx的内容。

9、sse:列出sse的内容。

10、sreg:列出段寄存器的内容。

11、dreg:列出debug寄存器的内容。

12、creg:列出控制寄存器的内容。

13、page <laddr>:显示<laddr>处线性地址对应物理地址的关系。

14、ptime:显示当前时间。(从模拟器启动到当前指令的ticks数)。

15、print-stack [num_word]:显示栈的情况,以16位字为单位的数量。

16、calc|?<expr>:计算表达式并显示结果。

        ‘expr’ 可以是任何通用的操作,比如掩码操作和段寄存器操作、任何算术和逻辑操作,也可以在实模式和v86模式下用‘:’操作符以segment:offset的方式计算线性地址或者在保护模式下用':'操作符 以 selector:offset的方式计算线性地址。

五、bochs的工作参数

1、show--与第一段相同

2、restore <filename> [path]:从一个文件中恢复bochs的root参数。例如:

      restore "cpu0" -- 从当前目录下、cpu0文件恢复参数。

      restore "cpu0" "/sava" -- 从/save目录下、cpu0文件恢复参数。

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值