设为首页 收藏本站
查看: 1222|回复: 0

win7下debug的常用命令

[复制链接]

尚未签到

发表于 2015-5-14 11:16:43 | 显示全部楼层 |阅读模式
  1 输入debug命令
    在win7的命令行中输入debug,就进入到虚拟8086的执行环境了。也可以输入debug + 程序名字,这就是对某个程序进行调试。

  2 r(register)命令
    从名字可以看出是对寄存器操作的命令,此指令有两个功能:一是显示所以寄存器和标记的内容,二是修改寄存器的内容。只输入r来显示寄存器的内容:
   DSC0000.jpg
  
   debug总共显示3行,最底下一行是debug正要执行的命令,即cs:ip指向的命令。第一行和第二行显示了各个寄存器的值,其中第二行的最后表示的是标志寄存器中的值,从左到右分别为:溢出标志:ov(溢出),nv(未溢出);方向标志:dn(减),up(曾);中断标志:ei(启用),di(禁用);正负标志:ng(负),pl(正);零标志:zr(为零),nz(不为0);辅助进位标志:ac(进位),na(未进位);奇偶校验标志:pe(偶校验),po(奇校验);进位标志:cy(进位),nc(未进位)。
    如果想修改某个寄存器的值,直接在r后面加上要修改寄存器的名字,如:r ax ,然后回车并输入修改的值再回车就可以了。
DSC0001.jpg
    从上图可以看出ax的值确实改变了,不但可以改变ax的值,其它寄存器的值都可以改变,包括cs,ip的值,这是在汇编程序中所做不到的。
  3 d(dump)命令查看内存中的信息
    如果想知道10000h内存中的信息,可以用”d 段地址:段偏移地址“来查看:
DSC0002.jpg
  使用”d 段地址:段偏移地址“的格式,debug会列出从指定内存单元开始的128个内存单元的内容。如上图所示,在使用d 1000:0 后,debug列出了1000:0-1000:7f中的内容。
    在使用”d 段地址:段偏移地址“之后,接着使用d命令,可列出后续的内容,如下图所示:
DSC0003.jpg
  也可以用指定d命令的查看范围,此时采用”d 段起始地址:起始偏移地址 结尾偏移地址“的格式。比如要查看1000:0-1000:9中的内容,可以用“d 1000:0 9”实现,如下图所示:
DSC0004.jpg
  4 e(edit)命令改写内存中的内容
    可以用“e 起始地址 数据 数据 数据...”的格式来修改从起始地址开始的内存中的内容。比如修改10000h开始的10个单元的内容,如下图:
DSC0005.jpg
    也可以用e命令以提问的方式来逐个地修改从某一地址开始的内存单元中的内容,以从1000:10单元开始为例,步骤如下:

  • 输入e 1000:10,按enter键
  • debug显示起始地址1000:0010,和第一个单元的原始内容:00,然后光标停在“.”后面提示输入想要写入的数据,此时有两种选择:一是输入数据,然后按空格键,即输入数据修改当前的内存单元;二位不输入数据,直接按空格键,则不对当前内存单元进行改写。
  • 当前单元处理完后(不论改写或者没有改写,只要按了空格键,就表示处理完成),debug将显示下一个内存单元的原始内容,并提示修改。
  • 所以希望改写的内存单元改写完成后,按enter键,e命令操作结束。
    如下图所示:
DSC0006.jpg
  也可以用e命令向内存单元写入字符串,比如用e命令从内存1000:0开始写入:1、“a+b”、2、“c++”、‘3’、“IBM”,如下图所示:
DSC0007.jpg
   也可以向内存张写入机器码。
  5 用u(un-assembly)来反汇编机器码
    我们首先用e命令从内存1000:0单元开始写入这样一段机器码:
    机器码                             对应汇编指令
    b80100          mov ax, 0001
    b90200                            mov cs, 0002
    01c8            add ax, cx
    然后用u命令反汇编出这段内存中的汇编命令,如下图所示:
DSC0008.jpg
  6 t(trace)单步调试命令
    没输入一个t,debug就执行一条指令,然后停下了显示所有寄存器的内容。如下图所示:
DSC0009.jpg
  7 a(assembly)命令以汇编指令形式写指令到内存中
    前面说过可以用e命令写入机器码,但这样很不方便,必须记住机器码才行,而a命令以汇编形式写入就方便多了,“a 起始地址“表示将汇编指令写入某个地址中,如下图:
DSC00010.jpg
  8 n(name)命令
    指定 debug l(加载)或 w(写入)命令的可执行文件的名称,或者指定正在调试的可执行文件的参数。
  n [drive:][path] filename
  要指定测试的可执行文件的参数,请使用以下语法:
  n file-parameters

  9 l(load)命令
    l命令将n命令指定的可执行文件加载到内存的某个地址中。
  要从磁盘文件加载 BX:CX 寄存器中指定的字节数内容,请使用以下语法:
  l [address]
  要略过 Windows 2000 文件系统并直接加载特定的扇区,请使用以下语法:
  l address drive start number
  不过我在win7中试了第一个语法,debug居然报错,不知道为什么,只有用不带参数的l命令才行。如下图所示:

   DSC00011.jpg
  
    也就是说加载文件只能加载到开始进入debug时cs:ip所指向的起始内存单元中去。但是在网上找了很多资料,都说可以直接加载到一个指定的地址中去,不知道为什么不行?

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-66891-1-1.html 上篇帖子: 一步一步教你搭建win7下的Node.js服务(来玩玩服务器端的javascript吧,这可不是前端js插件) 下篇帖子: 搭建SharePoint开发环境——如何在Win7安装SharePointFoundation
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表