Bochs常用调试命令
=============================================================================================
这是本人参考《x86汇编从实模式到保护模式》--李忠 后添加的内容:
1、设置跳过循环:当有rep movsw等类似的循环时,可以用命令:n 直接跳过循环
2、查看通用寄存器,直接用命令:r
3、查看段寄存器,命令:sreg
4、查看标志寄存器,命令:info eflags;大写的位表示为1,小写的表示为0;如:SF 表示1,zf 表示0;
5、反汇编,命令:u/指令个数 开始反汇编地址;
如:如果要反汇编2条指令,且在当前地址开始,则:u/2 就可以;
如:如果在主引导区开始反汇编5条指令,则:u/5 0x07c00;
这条指令的用处是用来跳过条件循环的,比如有个 loop jnz 条件循环,想跳过这个循环,操作如下:
a、s 单步执行到loop jnz前一条指令(s单步调试 显示的指令是接下来要执行的指令)
b、用u反汇编两条指令,这两条指令分别是:loop jnz,和下一条指令(即,跳出循环后的第一条指令)
c、设置断点,b 反汇编地址(loop jnz下一条指令反汇编出来的地址)
d、直接用c执行到断点处,就可以跳出条件循环了
下面部分是转载别人的,转载地址在最后面。下面这些命令有部分在bochs调试x86汇编时没有用,可能是版本原因,但为了保证转载文章的完整性还是全部转载过来了。我的转载地址http://blog.csdn.net/yuzhihui_no1/article/details/41446111,希望转载时,保存两部分文章的完整性。
==============================================================================================
Bochs是非常好用的模拟器,命令也很多,不过最常用的其实总结起来也就包括几条,记住这些命令基本都可以满足调试需求了。
1. 断点操作
(1)设置断点:b 物理地址
例:b 0x7c00 在物理地址0x7c00处设置断点
(2)查询目前已经设置过的断点:info break
2. 程序的执行
(1)执行程序,直到遇到断点: c
(2)单步执行:s
(3)执行N条指令:step N
例如执行3条指令: step 3
2. 寄存器值查询
(1)info r 这条指令会查询基本的寄存器的值,具体如下图:
(2)dump_cpu
这个命令显示的寄存器比info r的更全面,而且连影子寄存器的值都打印出来了:
3. 内存内容查询
(1)查询从某个地址开始的N个字节的内存:xp /Nbx 物理地址
例如:xp /32bx 0x90000 查询从0x90000开始的32个字节内容
(2)打印当前栈里的内容:print-stack
下面的例子里:040803c0是当前运行程序的线性地址,01ff53c0是对应的实际物理地址。
4. 反汇编一段内存:disassemble 起始地址 终止地址
例如:disassemble 0x7c3e 0x7c40 反汇编这段地址的指令
转载地址:http://blog.csdn.net/ddna/article/details/4997695