DEBUG 知识

DEBUG 初步使用

Step 1:点击“开始→运行”,输入“CMD”(Windows 2000/XP)或“Command”(Windows 9x)打开命令提示符窗口。

  Step 2:输入“Debug”并回车,出现提示符“-”,现在你已经开启了神秘的Debug世界了。

  小提示

  执行“?”命令可以参看Debug主要命令及参数。

  Step 3:输入“D FE00:0”,回车后可以看到结果(见图1),这个就是主板BIOS的厂商信息。接着再输入“D FFFF:5 L 8”,回车后,主板的BIOS版本日期也出来了。


  Step 4:现在再输入“Q”命令,回车后就退出了Debug程序。

  三、继续深入:Debug经典实例秀

  在操作以下实例之前,提醒您要注意操作安全,因为Debug命令有一定风险,如果输入错误,有可能对系统造成一定破坏,这点请您一定注意。

  实例1:查看你的显卡信息

  输入“D C000:0090”命令并回车,这时右侧部分可以看到系统中显卡的显存、生产厂商等信息。

     实例2:制作BIOS密码破解器

  忘记BIOS密码,一般都采用放电法来清空密码,但这对普通用户有一定难度,并且还得开机箱。其实利用Debug的0命令则简单得多!请在“-”后输入以下命令:

  o 70 19
  o 71 15
  q

  重启电脑,系统提示CMOS校验和出错,并要求重新进入BIOS设置CMOS。

  小提示:70和71是CMOS的两个端口,我们可以在它们的后面随意写入一些错误数据(如19、16、17等),就会清空CMOS里所有设置,如果不见效不妨多用几个数据试试。

  如果觉得每次输入Debug命令太麻烦,可以用下面的方法把命令存成一个COM文件,需要解除密码时只要运行一下就行了。请在Debug中命令提示符“-”后输入以下命令:

  A 100
  MOV DX,70
  MOV AL,10
  OUT DX,AL
  MOV DX,71
  MOV AL,01
  OUT DX,AL(这里要两次回车,接着会出现“-”提示符,然后再输入下面的命令)
  R CX(回车后会出现“CX 0000”,然后再次按回车)
  0C
  N pass.COM
  W
  Q

  这样就会在Debug当前目录下生成pass.com,是一个清除BIOS口令设置的程序,只要在DOS提示符下键入“pass”,然后按回车即可。经我们测试,其实在Windows下面运行也可以成功。知识不太稳定,有时会重新启动计算机。

=====================================================================
DEBUG 参数说明

  DEBUG是为汇编语言设计的一种高度工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
一、DEBUG程序的调用
    在DOS的提示符下,可键入命令:
        C:\DEBUG [D:][PATH][FILENAME[.EXT]][PARM1][PARM2]
    其中,文件名是被调试文件的名字。如用户键入文件,则DEBUG将指定的文件装入存储器中,用户可对其进行调试。如果未键入文件名,则用户可以用当前存储器的内容工作,或者用DEBUG命令N和L把需要的文件装入存储器后再进行调试。命令中的D指定驱动器PATH为路径,PARM1和PARM2则为运行被调试文件时所需要的命令参数。
    在DEBUG程序调入后,将出现提示符,此时就可用DEBUG命令来调试程序。
二、DEBUG的主要命令
    1、显示存储单元的命令D(DUMP),格式为:
    _D[address]或_D[range]
    例如,按指定范围显示存储单元内容的方法为:
    -d100 120
18E4:0100 c7 06 04 02 38 01 c7 06-06 02 00 02 c7 06 08 02 G...8.G.....G...
18E$:0110 02 02 bb 04 02 e8 02 00-CD 20 50 51 56 57 8B 37 ..;..h..M PQVW.
        7
18E4:0120 8B
    其中0100至0120是DEBUG显示的单元内容,左边用十六进制表示每个字节,右边用ASCII字符表示每个字节,·表示不可显示的字符。这里没有指定段地址,D命令自动显示DS段的内容。如果只指定首地址,则显示从首地址开始的80个字节的内容。如果完全没有指定地址,则显示上一个D命令显示的最后一个单元后的内容。
2、修改存储单元内容的命令有两种。
    ·输入命令E(ENTER),有两种格式如下:第一种格式可以用给定的内容表来替代指定范围的存储单元内容。命令格式为:
    -E address[list]
例如,-E DS:100 F3'XYZ'8D
    其中F3,'X','Y','Z'和各占一个字节,该命令可以用这五个字节来替代存储单元DS:0100到0104的原先的内容。
    第二种格式则是采用逐个单元相继修改的方法。命令格式为:
    -E address
例如,-E DS:100
    则可能显示为:
        18E4:0100 89.-
    如果需要把该单元的内容修改为78,则用户可以直接键入78,再按“空格”键可接着显示下一个单元的内容,如下:
    18E4:0100 89.78 1B.-
    这样,用户可以不断修改相继单元的内容,直到用ENTER键结束该命令为止。
    ·填写命令F(FILL),其格式为:
    -F range list
例如:-F 4BA:0100 5 F3'XYZ'8D
    使04BA:0100~0104单元包含指定的五个字节的内容。如果list中的字节数超过指定的范围,则忽略超过的项;如果list的字节数小于指定的范围,则重复使用list填入,直到填满指定的所有单元为止。
3)检查和修改寄存器内容的命令R(register),它有三种格式如下:
    ·显示CPU内所有寄存器内容和标志位状态,其格式为:
        -R
例如,-r
    AX=0000 BX=0000 CX=010A DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
    DS=18E4 ES=18E4 SS=18E4 CS=18E4 IP=0100 NV UP DI PL NZ NA PO NC
    18E4:0100 C70604023801 MOV WORD PTR [0204],0138 DS:0204=0000
    ·显示和修改某个寄存器内容,其格式为:
    -R register name
例如,键入
    -R AX
    系统将响应如下:
    AX F1F4
    :
即AX寄存器的当前内容为F1F4,如不修改则按ENTER键,否则,可键入欲修改的内容,如:

    -R bx
    BX 0369
    :059F
则把BX寄存器的内容修改为059F。
    ·显示和修改标志位状态,命令格式为:
        -RF系统将响应,如:
        OV DN EI NG ZR AC PE CY-
    此时,如不修改其内容可按ENTER键,否则,可键入欲修改的内容,如:
        OV DN EI NG ZR AC PE CY-PONZDINV
    即可,可见键入的顺序可以是任意的。
4)运行命令G,其格式为:
    -G[=address1][address2[address3…]]
    其中,地址1指定了运行的起始地址,如不指定则从当前的CS:IP开始运行。后面的地址均为断点地址,当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容,和下一条将要执行的指令。
5)跟踪命令T(Trace),有两种格式:
    ·逐条指令跟踪
    -T [=address]
    从指定地址起执行一条指令后停下来,显示所有寄存器内容及标志位的值。如未指定地址则从当前的CS:IP开始执行。
    ·多条指令跟踪
    -T [=address][value]
    从指定地址起执行n条指令后停下来,n由value指定。
6)汇编命令A(Assemble),其格式为:
    -A[address]
    该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。必须注意:DEBUG把键入的数字均看成十六进制数,所以如要键入十进制数,则其后应加以说明,如100D。
7)反汇编命令U(Unassemble)有两种格式。
    ·从指定地址开始,反汇编32个字节,其格式为:
    -U[address]
例如:
    -u100
    18E4:0100 C70604023801   MOV   WORD PTR[0204],0138
    18E4:0106 C70606020002   MOV   WORD PTR[0206],0200
    18E4:010C C70606020202   MOV   WORD PTR[0208],0202
    18E4:0112 BBO4O2                 MOV     BX,0204
    18E4:0115 E80200                 CALL 011A
    18E4:0118 CD20             INT   20
    18E4:011A 50                PUSH AX
    18E4:011B 51                PUSH CX
    18E4:011C 56                PUSH SI
    18E4:011D 57                PUSH DI
    18E4:011E 8B37 MOV SI,[BX]
如果地址被省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。
    ·对指定范围内的存储单元进行反汇编,格式为:
    -U[range]
例如:
    -u100 10c
    18E4:0100 C70604023801 MOV WORD PTR[0204],0138
    18E4:0106 C70606020002 MOV WORD PTR[0206],0200
    18E4:010C C70606020202 MOV WORD PTR[0208],0202

    -u100 112   
    18E4:0100 C70604023801 MOV WORD PTR[0204],0138
    18E4:0106 C70606020002 MOV WORD PTR[0206],0200
    18E4:010C C70606020202 MOV WORD PTR[0208],0202

    可见这两种格式是等效的。
8)命名命令N(Name),其格式为:
    -N filespecs [filespecs]
命令把两个文件标识符格式化在CS:5CH和CS:6CH的两个文件控制块中,以便在其后用L或W命令把文件装入存盘。filespecs的格式可以是:
[d:][path] filename[.ext]
例如,
    -N myprog
    -L
    -
可把文件myprog装入存储器。
9)装入命令(Load),有两种功能。
    ·把磁盘上指定扇区范围的内容装入到存储器从指定地址开始的区域中。其格式为:
    -L[address[drive sector sector]
    ·装入指定文件,其格式为:
    -L[address]
此命令装入已在CS:5CH中格式化了文件控制块所指定的文件。如未指定地址,则装入CS:0100开始的存储区中。
10)写命令W(Write),有两种功能。
    ·把数据写入磁盘的指定扇区。其格式为:
        -W address drive sector sector
    ·把数据写入指定的文件中。其格式为:
        -W[address]
此命令把指定的存储区中的数据写入由CS:5CH处的文件控制块所指定的文件中。如未指定地址则数据从CS:0100开始。要写入文件的字节数应先放入BX和CX中。
11)退出DEBUG命令Q(Quit),其格式为:
    -Q
它退出DEBUG,返回DOS。本命令并无存盘功能,如需存盘应先使用W命令。


 

原文地址:https://www.cnblogs.com/moonson/p/1202638.html