“DEBUG”反汇编

DEBUG是Windows自带的调试工具,看Help吧,又是一大堆E文。 

所以这里解释一下 

一、A(assemble):汇编命令  

    命令格式:a[<目标开始地址>]  

    功能:从address地址开始写入汇编命令,回车结束此行,进入下一内存地址的编译。如无address参数,则默认从cs:ip下一址开始编译。  

    例:a 1000:1000    从1000:1000地址开始输入汇编指令。  

 

二、C(compare):比较命令  

    命令格式:c<范围><地址范围>  

    功能:比较指定内存地址(range address)的值。  

    例:c 100:0 100 10:0    比较从100:0开始的下100个地址与10:0开始的下100个地址。  

 

三、D(dump):内存显示命令  

    命令格式:d[<目标开始地址][目标范围>]  

    功能:显示指定范围的内存值。  

    例:d 100:100    显示100:100地址及下个内存的值。  

     d 100        显示ds:100地址及下个内存的值。  

 

四、e(enter):内存修改命令  

    命令格式:e<目标地址><目标范围>  

    功能:修改指定内存的值。  

    使用:空格编辑下一内存地址值,减号回到上一内存地址进行重编辑,回车完成编辑。  

  例:e   修改ds:ip的值;  

     e 100    修改ds:100内存的值。  

 

五、F(fill):内存填充命令  

    命令格式:f<目标范围><填充值列表>  

    功能:填充指定范围内存的指定值。  

    使用: range:内存地址范围。list:填充值列表,多个值用空格隔开。依次列入指定地址,地址数,填充值数,则填充从头开始循环填入指定内存。  

    例:f 100 l 100 'ab''cd'   在从ds:100开始的下100个内存中分别填入'ab''cd'。  

 

六、G(go):运行命令  

    命令格式:g[=开始地址][断点地址]  

    功能:从指定地址开始运行。可设定断点,DEBUG支持最多10个断点的设定。  

    例:g =100 200 300   从地址cs:100处开始执行,并分别在cs:200和cs:300处置断点。  

 

七、H(hex):运算命令  

    命令格式:h<16进制值1><16进制值2>  

    功能:16进制加减的计算,使用后打印的两个值(16进制数)分别为16进制值1和16进制值2的和与差。  

    例:h ab cd    分别求16进制数ab+cd与ab-cd的值。  

 

八、I(input):端口命令  

    命令格式:i<目标端口值>  

    功能:输入值(2byte)到指定端口。  

    例:i 10    从10号端口中读入一字节值  

 

九、L(load):加载命令  

    命令格式:l [路径][磁盘号][扇区号][扇区数]  

    功能:加载指定磁盘号、扇区号和扇区数的磁盘内容到指定内存。  

    使用:address:指定要加载到的内存.drive:要加载的磁盘号,此处的磁盘号为:A:0号。B:1号,C:2号。依此类推。firstector:扇区号.number:扇区数,并置EAX:EDX为文件的大小,此处的eax:edx是将大小值的高位放到EAX,低位放到edx,而非指向eax:edx的内存地址。若加载的是*.exe或*.com文件未指定路径,则*.exe会加载到cs:100(此值不可更改),而*.com文件会在cs:ip处。  

    例:l c:/test.txt 2  

 

十、M(move):内存copy命令  

    命令格式:m<地址范围><目标地址开始地址>  

    功能:拷贝指定内存值到指定内存地址。  

    使用:range address:两个地址范围。  

    例:m 0000:1 l 20 0010:0   把从0:1内存地址开始的长度为20的内存值复制到地址10:0开头的内存。此命令的目的地址与源地址有重叠也不会发生错误。  

 

一一、N(name):命名命令  

    命令格式:n[路径]/[参数列表]  

    功能:将指定文件存入DEBUG的FCB(文件控制模块)中,以备以后加载(L)和存盘(W)。  

    例:n c:/test.txt  将c:/test.txt放入FCB中。  

       l   将c:/text.txt载入内存,使cs:ip指向该文件开头,并置bx:cx为文件大小值。  

        此两条命令相当于:debug c:/test.txt。  

 

一二、O(output):端口命令  

    命令格式:o[端口值]  

    功能:从指定端口输入一字节值。  

    例:o 71    从71号端口中输入一字节。  

 

一三、P(procee*)  

     命令格式:* [=<地址>][<指令条数>]  

     功能:单步跟踪,执行指定的一条或多条指令,但遇到过程与中断不进入,而是继续下一条指令。  

     例:* =100 20   执行从cs:100开始的以下20条指令  

 

一四、Q(quit):退出命令  

    命令格式:q  

    功能:没什么好说的了,就是退出DEBUG。  

 

一五、R(registry):寄存器命令  

    命令格式:r [寄存器名]  

    功能:显示当前名寄存器(16位)值、8个标志位的状态,并反汇编cs:ip所指的下一条指令。后跟寄存器名可修改其值。  

    例:r ax    修改ax的值  

 

一六、S(search):搜索命令  

    命令格式:s [范围]'搜索字符列表'  

    功能:搜索指定的字符串,若找到则显示地址与值,若无则什么也不输出,等待下一条指令。必须指定全部参数。  

    例:s 0000:1111 l 20 '32'    在0000:1111以后的20个地址中搜索字符串'32'。  

 

一七、T(track):单步跟踪命令  

    命令格式:t [=<地址>][<指令条数>]  

    功能:单步跟踪,执行指定的一条或多条指令,遇到过程与中断进入到过程中去。每一步过程算一条指令。  

     

 

一八、U(unassemble):反汇编命令  

    命令格式:u [开始地址][范围]  

 

一九、W(write):写盘命令  

    命令格式:w[目标开始地址][目标磁盘号][扇区号][扇区数]  

  功能  

    功能:写从目标起始地址或cs:ip开始的,长度为bx:cx的内存内容到指定的磁盘。此命令很危险,稍有不慎可以毁坏文件或分区表,故应慎重使用。  

    例:w 1:100   把从0:100开始的,长度为bx:cx的内存内容写入已用debug或n+1加载的文件中,注意*.exe文件的写入方式很特殊,故此处的文件不可为*.exe文件。  

 

---------------------------------------------  

[范围]的说明:  

 

范围有两种表示方式:  

(1)开始地址  结束地址;  

(2)开始地址  l(此处是L,非数字1) 偏移量;     

如:地址:123:0到期123:fff可表示为:123:o fff或123:456 l 65535  

 

[默认地址]:  

 

(1)默认段地址:关于代码的命令,如:u,a等的默认地址一般为DS,而关于数据的命令所用的默认地址一般为CS中,如d,e,f等;  

(2)默认偏移地址:一般为IP。  

 

关于DEBUG:  

(1)DEBUG所用的值均为16进制数值,且不跟后辍H,这一点要注意;  

(2)DEBUG的命令与参数大小写均可,分隔符也只是在两个数字之间有必要才打。当然,你若愿意,打上也不算错;  

(3)不可用作32位位的调试器;  

(4)超越地址应分两行,先写段地址,再写代码。即:  

   mov ax,ds:[bx]  

应写为:  

  ds:  

   mov ax,[bx]  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值