bochs调试x86汇编

参考:https://blog.csdn.net/YuZhiHui_No1/article/details/41446111?utm_source=blogxgwz1

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


 
原文地址:https://www.cnblogs.com/kuangke/p/14702274.html