• debug常用命令介绍(学习汇编)


    -r  功能:显示所有寄存器内容,以十六进制形式显示cpu内部个寄存器的值;以符号形式显示标志寄存器的各标志位(除tf外)的值;并将CS:IP所指的内存内容反汇编成一条指令,可视为将要执行的指令。如:

    -r   回车
    AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
    DS=0AF0  ES=0AF0  SS=0AF0  CS=0AF0  IP=0200   NV UP EI PL NZ NA PO NC
    0AF0:0200 B238          MOV     DL,38
    修改寄存器
    格式:-r  寄存器名 
    -r ds
    DS 0AF
    :0AE0
    ds的内容由原来的0af0h修改为0ae0h


    -A 内存地址(以汇编指令的格式在内存中写入一条机器指令) 

    例:调用dos中02h号功能显示字符‘a’,将该程序汇编到1270:100h开始的内存中。
    -A1270:100
    1270:0100 mov,ah,2
    1270:0102 mov,dl,61
    1270:0104 int 21
    1270:0106 int 20
    1270:0108
    -

    反汇编命令 U
    格式:-u 内存块  
    功能:分三列显示反汇编的结果,第一列为指令首地址,第二列为16进制形式的指令机器码,第三列为指令的助记符。
    -u 1270:100
    1270:0100 B402          MOV     AH,02
    1270:0102 B261          MOV     DL,61
    1270:0104 CD21          INT     21
    1270:0106 CD20          INT     20
    1270:0108 0000          ADD     [BX+SI],AL
    1270:010A 0000          ADD     [BX+SI],AL
    1270:010C 0000          ADD     [BX+SI],AL
    1270:010E 0000          ADD     [BX+SI],AL
    1270:0110 0000          ADD     [BX+SI],AL
    1270:0112 0000          ADD     [BX+SI],AL
    1270:0114 0000          ADD     [BX+SI],AL
    1270:0116 0000          ADD     [BX+SI],AL
    1270:0118 0000          ADD     [BX+SI],AL
    1270:011A 0000          ADD     [BX+SI],AL
    1270:011C 0000          ADD     [BX+SI],AL
    1270:011E 0000          ADD     [BX+SI],AL
    -


    1.单步执行
    格式:-t=内存地址回车
    格式:-p=内存地址 回车
    功能:用命令中的内存地址的段地址和偏移地址修改cs和ip,然后执行由cs:ip指向的内存单元处的一条指令,显示各寄存器的值,并反汇编下一条指令,返回debug状态。
    例:
    -t=1270:100
    AX=0200  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
    DS=0AE0  ES=0AF0  SS=0AF0  CS=1270  IP=0102   OV UP EI NG NZ NA PO NC
    1270: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,执行其后的下一条指令,才返回debug
    two:调用指令call及中断调用指令int,由于这类指令修改了cs和ip,使程序结构产生转向。用t命令则在cs:ip(子程序)入口处停下来返回debug,可用t命令进行跟踪。而用p命令则显示call和int的下一条指令
    如:分别用t和p执行1270:0140h处的指令int 21h。

    -t=1270:104
    AX=0200  BX=0000  CX=0000  DX=0000  SP=FFE8  BP=0000  SI=0000  DI=0000
    DS=0AE0  ES=0AF0  SS=0AF0  CS=00A7  IP=107C   OV UP DI NG NZ NA PO NC
    00A7:107C 90            NOP


    -p=1270:104
    AX=0200  BX=0000  CX=0000  DX=0000  SP=FFE8  BP=0000  SI=0000  DI=0000
    DS=0AE0  ES=0AF0  SS=0AF0  CS=1270  IP=0106   OV UP DI NG NZ NA PO NC
    1270:0106 CD20          INT     20


    3.连续执行
    -g=内存地址

    g命令可以直接执行至指定地址,

    而p命令可以直接把循环部分执行完


    4.断点执行
    格式:-g=内存地址 断点地址


    1.显示命令  d
    格式:-d 内存块
    例:显示-d1270:100h到1210内存块的内容
    -d1270:100 l30
    1270: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 cx
    CX 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,02
    1270:0102 B261          MOV     DL,61
    1270:0104 CD21          INT     21
    1270:0106 CD20          INT     20
    1270:0108 0000          ADD     [BX+SI],AL
    1270:010A 0000          ADD     [BX+SI],AL
    1270:010C 0000          ADD     [BX+SI],AL
    1270:010E 0000          ADD     [BX+SI],AL
    1270:0110 0000          ADD     [BX+SI],AL
    1270:0112 0000          ADD     [BX+SI],AL
    1270:0114 0000          ADD     [BX+SI],AL
    1270:0116 0000          ADD     [BX+SI],AL
    1270:0118 0000          ADD     [BX+SI],AL
    1270:011A 0000          ADD     [BX+SI],AL
    1270:011C 0000          ADD     [BX+SI],AL
    1270:011E 0000          ADD     [BX+SI],AL


    (6)I/O端口地址
    1.输入命令
    格式:-I 端口地址  回车
    功能:将指定端口的内容输入到AL寄存器,并显示该值。
    2.输出命令
    格式:-o 端口地址  数值   回车
    功能:将命令中的数值输出到指定端口中


    (7)十六进制加减
    格式:-h 数值1 数值2


    (8)退出命令
    q

  • 相关阅读:
    gdb调试
    go pipeline
    Go的Timer
    goconvey
    购物
    Go的可行测试
    可能会停止一段时间的更新
    一些blog
    linux全套 | Python开发平台_Ubuntu | 15
    Python基础 | 配置pip镜像源 | 01
  • 原文地址:https://www.cnblogs.com/ht-beyond/p/3887326.html
Copyright © 2020-2023  润新知