一,在debug环境下建立和汇编程序(1)进入debugC:\debug 回车(2)输入程序并汇编-A 100 回车0AF0:0100 mov dl,38 回车0AF0:0102 mov ah,2 回车0AF0:0104 int 21h 回车0AF0:0106 int 20h 回车0AF0:0108 回车(3)运行程序-g=1008Program terminated normally如果想分析该程序的指令,可使用反汇编命令U(4)反汇编-u 100,108 回车0AF0:0100 B238 MOV DL,30AF0:0102 B402 MOV AH,00AF0:0104 CD21 INT 210AF0:0106 CD20 INT 200AF0:0108 56 PUSH SI(5)将机器指令程序送到起始地址为200h的单元-e 200 b2,38,b4,02,cd,21,cd,20,56-g=2008Program terminated normally-二,常用debug命令介绍(1)显示,修改寄存器内容显示所有寄存器内容格式:-r 回车功能:以十六进制形式显示cpu内部个寄存器的值;以符号形式显示标志寄存器的各标志位(除tf外)的值;并将CS:IP所指的内存内容反汇编成一条指令,可视为将要执行的指令。如:-r 回车AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0AF0 ES=0AF0 SS=0AF0 CS=0AF0 IP=0200 NV UP EI PL NZ NA PO NC0AF0:0200 B238 MOV DL,38知:cs=0AF0h,IP=0100h修改寄存器格式:-r 寄存器名 回车-r dsDS 0AF:0AE0-rds的内容由原来的0af0h修改为0ae0h修改标志值格式:-rf例:-rfNV UP EI PL NZ NA PO NC -ov ng 回车将of,sf的值分别修改为1。(2)汇编,反汇编指令汇编命令 A格式:-A 内存地址 回车例:调用dos中02h号功能显示字符‘a’,将该程序汇编到1270:100h开始的内存中。-A1270:1001270:0100 mov,ah,21270:0102 mov,dl,611270:0104 int 211270:0106 int 201270:0108-反汇编命令 U格式:-u 内存块 回车功能:分三列显示反汇编的结果,第一列为指令首地址,第二列为16进制形式的指令机器码,第三列为指令的助记符。-u 1270:1001270:0100 B402 MOV AH,021270:0102 B261 MOV DL,611270:0104 CD21 INT 211270:0106 CD20 INT 201270:0108 0000 ADD [BX+SI],AL1270:010A 0000 ADD [BX+SI],AL1270:010C 0000 ADD [BX+SI],AL1270:010E 0000 ADD [BX+SI],AL1270:0110 0000 ADD [BX+SI],AL1270:0112 0000 ADD [BX+SI],AL1270:0114 0000 ADD [BX+SI],AL1270:0116 0000 ADD [BX+SI],AL1270:0118 0000 ADD [BX+SI],AL1270:011A 0000 ADD [BX+SI],AL1270:011C 0000 ADD [BX+SI],AL1270:011E 0000 ADD [BX+SI],AL-(3)执行程序1.单步执行格式:-t=内存地址 回车格式:-p=内存地址 回车功能:用命令中的内存地址的段地址和偏移地址修改cs和ip,然后执行由cs:ip指向的内存单元处的一条指令,显示各寄存器的值,并反汇编下一条指令,返回debug状态。例:-t=1270:100AX=0200 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=0AE0 ES=0AF0 SS=0AF0 CS=1270 IP=0102 OV UP EI NG NZ NA PO NC1270:0102 B261 MOV DL,61-执行结果:ah=2,cs值不变,ip的值增加2,cs:ip指向第二条指令2.多步执行格式:-t=内存地址 执行指令的条数格式:-p=内存地址 执行指令的条数命令t和p的不同:one:带重复前缀rep/repnz/repz的串操作指令和loop/loopz/loopn等循环指令是与cs相关的指令。用t命令执行这类指令时,每执行一次,cx值减一,就停下来返回debug;而p命令执行时,一直执行到cx=0,执行其后的下一条指令,才返回debugtwo:调用指令call及中断调用指令int,由于这类指令修改了cs和ip,使程序结构产生转向。用t命令则在cs:ip(子程序)入口处停下来返回debug,可用t命令进行跟踪。而用p命令则显示call和int的下一条指令如:分别用t和p执行1270:0140h处的指令int 21h。-t=1270:104AX=0200 BX=0000 CX=0000 DX=0000 SP=FFE8 BP=0000 SI=0000 DI=0000DS=0AE0 ES=0AF0 SS=0AF0 CS=00A7 IP=107C OV UP DI NG NZ NA PO NC00A7:107C 90 NOP-p=1270:104AX=0200 BX=0000 CX=0000 DX=0000 SP=FFE8 BP=0000 SI=0000 DI=0000DS=0AE0 ES=0AF0 SS=0AF0 CS=1270 IP=0106 OV UP DI NG NZ NA PO NC1270:0106 CD20 INT 203.连续执行-g=内存地址4.断点执行格式:-g=内存地址 断点地址 作者:青春无悔专家分:0 会员信息 发短消息 所属BLOG 发表时间:2005-11-17 13:28:00 第 1 楼 (4)显示,修改内存内容1.显示命令 d格式:-d 内存块例:显示-d1270:100h到1210内存块的内容-d1270:100 l301270:0100 B4 02 B2 61 CD 21 CD 20-00 00 00 00 00 00 00 00 ...a.!. ........1270:0110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................1270:0120 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................2.修改命令 e格式1:-e 内存地址 字符或数值串格式2:-e 内存地址3.填充指令格式:-f 内存块 字符或数值串例:-f ds:2000 2100 ‘hello world’4.搜索指令 s格式:-s 内存块 字符或数值串5.移动指令 m格式:-m 内存块1 内存块2的首地址功能:将内存块1的内容复制到内存块2,内存块1内容不变6.比较指令 c格式:-c 内存块1 内存块2的首地址(5)读写磁盘1.指定文件命令 N格式:-N[d:][PATH]文件名.扩展名 回车功能:为命令L和命令W指定文件,其中[d:][PATH]为文件所在的盘号和路径。2.写入命令 W格式:-W 内存地址 回车功能:将指定内存块的内容写到由命令N指定的文件中,其中内存块的首地址命令W指定,内存块的大小由BX,CX两寄存器决定,BX存放内存块大小的高字节,CX存放内存块大小的低字节。3.装入命令L块格式:-L内存地址 回车功能:将命令N指定的文件装入到命令L给出的内存地址开始处。文件固定装入到CS:IP处。4.装入可执行的.EXE或.COM文件通常在调试可执行的.EXE或.COM文件时,可以不用N和L命令来装入,而直接在进入debug的命令后加上要装入的文件。格式:>[d:][path]debug 文件名.扩展名 回车功能:将命令中指定的文件装入到内存CS:IP处例:把从1270:100h开始30h个字节的内存块内容写到D盘的根目录AA.DAT文件中-n I:aa.dat ;用命令N指定文件名-r bx ;修改BX的值 BX 0000 :0 ;bx=0h,存放文件长度的高位值-r cxCX 0010:30 ;cx=30h,存放文件长度的低位值-w 1270:100 ;将指定的内存块写到aa.dat文件上。Writing 00030 bytes例:将I盘根目录下的aa.dat文件调到内存CS:100h开始处。-n I:aa.dat 回车-l cs:100 回车-u cs:100 回车1270:0100 B402 MOV AH,021270:0102 B261 MOV DL,611270:0104 CD21 INT 211270:0106 CD20 INT 201270:0108 0000 ADD [BX+SI],AL1270:010A 0000 ADD [BX+SI],AL1270:010C 0000 ADD [BX+SI],AL1270:010E 0000 ADD [BX+SI],AL1270:0110 0000 ADD [BX+SI],AL1270:0112 0000 ADD [BX+SI],AL1270:0114 0000 ADD [BX+SI],AL1270:0116 0000 ADD [BX+SI],AL1270:0118 0000 ADD [BX+SI],AL1270:011A 0000 ADD [BX+SI],AL1270:011C 0000 ADD [BX+SI],AL1270:011E 0000 ADD [BX+SI],AL(6)I/O端口地址1.输入命令格式:-I 端口地址 回车功能:将指定端口的内容输入到AL寄存器,并显示该值。2.输出命令格式:-o 端口地址 数值 回车功能:将命令中的数值输出到指定端口中(7)十六进制加减格式:-h 数值1 数值2(8)退出命令格式:-q http://www.programfan.com/blog/article.asp?id=7148 http://xiaohaokof.programfan.com

评论