用户名:  密码:   
您当前的位置:首页 > 程序设计 >  汇编与密码学 > 

debug的用法

上次修改时间: 2018-03-29 15:50:06      来源:网络总结      作者:钢铁长陈
上一页      路径:DSD\Learn\assembly与反assembly\X86汇编(零基础入门学通汇编语言)\      下一页

说明:要在xp以前的系统的cmd下才有 debug,xp以上的cmd中没有debug
在win8或win10中使用debug的方法:
 1)下载dosbox0.74安装,注:虽是32位的程序也可以装
 2)先在D盘新建dos目录,把debug放到该目录。然后运行安装的dosbox,输入:
  mount c: d:dos //该命令的作用是把本机D盘下的dos目录作为dos系统的C盘,
      //以后放在D:\dos目录下的程序相当于放在在dos系统的C盘
  C:    //切换到dos系统的C盘
  debug   //运行debug程序
  debug 1.exe //用debug调试1.exe程序

1. 查看与修改寄存器的值用r命令
 r  //查看与修改当前寄存器的值
 r cs //修改当前cs寄存器的值,输入该指令后回车后就可以输入新的CS的值
 r ip //修改当前ip寄存器的值,输入该指令后回车就就可以输入新的ip的值
 r ax //改ax的值,如rx 1111
2. 查看内存中的内容
 d  //查看内存的二进制信息
 d 2000:0 //查看指定CS:IP处的二进制信息,这里是查看2000:0处二进制信息
   //**注:这里的偏移地址是以16进制表示的,如显示第16个位置,应写为d 2000:10
 d 2000:0 ff //查看指定CS:IP处的指定大小的单元的二进制信息,这里是查看2000:0处ff个单元的二进制信息
3. 改写内存中的内容用a或e命令
 1)a命令以是汇编指令的格式在内存中写入一条或多条指令
  a  //输入a指令后回车就可以输入汇编指令到内存了,默认是注当前CS:IP处添加汇编指令
  a 2000:0 //往指定CS:IP处添加汇编指令,输入该指令后回车添加的汇编指令是添加到2000:0处开始
 2)a命令是往内存CS:IP处写二进制信息
  e 1000:0 //修改cs:ip为1000:0处的二进制信息,
   //注:输入该命令回车后会显示原来当前字节的内容加点,在点后输入新的二进制信息
  例1:e 1000:0000 23.23 00.11 00.22 00.66 //这是修改的示例
   //每改一个字节后按空格就会显示下个字节加点,全部修改完后按回车
  例2:往显存写数据
   e B810:0000 01 01 02 03 03 04 04
****注:要改成下面的01/01/92如何写cs:ip,我在这里时出错
  FFF0:00F0 EA C0 12 00 F0 30 31 2F-30 31 2F 39 32 00 FC 55 .....01/01/92..U
  //当要编辑0的Ascii码30时,应写为:e ffff:05
  定义上面的二进制30可以是ffff:5或fff0:f5,但不能是fffe:6,因为段地址是要乘16的,具体可以debug中测试
4. 查看指定cs:IP处的汇编指令  
 u 2000:0 //查看指定CS:IP处的汇编指令(会将指定CS:IP处的二进制转为汇编指令输出)
5. 调试命令T,P,G
 t //用于单步执行汇编指令,从当前CS:IP处执行,可用r命令修改CS:IP的值以改变执行的初始位置
 p //可跳出循环也可和t命令功能一样单步,但P命令会执行int 21中断返回到debug中,t命令会忽略int21并一直执行下去,就算后面不是该程序的代码
  //注:在debug中只有用p命令才能执行int 21中断,用T命令不会执行int 2,貌似是跳过了这句,一般用t单步,用p退出
  //注2:只有当前语句是loop语句时用p才能跳出循环,哪果当前是循环中的其它语句用p不能跳出循环
 g //用于跳到指定偏移处,常用于跳出循环,先用u命令查看循环语句后一个语句的偏移地址,用g命令跳到这个偏移地址即可,可跳到任何偏移处
  如:g 0016  //跳到偏移地址为0016的语句,一般是loop语句的后一个语句的偏移地址,详见第5章025.5
q //退出debug程序回到dos

发现了一个问题
用debug调试程序时,执行mov ss,ax后ax段处的数据会被改的乱七八糟,但用push压入数据后这些数据被覆盖,用pop推出数据后推出了的位置又被改乱,应该是随机填充的,貌似每次都不一样