Debug学习

Debug的使用


①R命令,查看和改变cpu寄存器的值

这是模拟8086的cpu环境,可以看到有AX,BX,CX,DX,CS,IP

  • CS,IP指向的位置就是要执行指令的位置

  • 最后一行的参数就是指向命令的详情

  • 修改某个寄存器的值[R 寄存器]

  • 修改IP的值

  • R IP

  • Notes:不是直接[R cs 参数],并且不分大小写


②D命令,查看内存中的内容

  • 先看看进制转换,7F转换成十进制

  • 查看内存10000 的内容,D 段地址:偏移地址,D 1000:0,

  • Debug会列出从查询地址开始的128个内存单元(一个内存单元一个字节),即列出了,10000 ~ 1007F的值,每一行的数据从十进制16的整数倍开始

  • 左边的是每行的内存起止地址,cs:ip式的

  • 第一行的内容所在内存1000:0 ~ 1000:F,为什么中间有十六个数据,因为0~F用十进制代表有16个,即有16个内存单元.而一个内存单元占一个字节(byte),一个字节八位,一位只能表示0或1,所以最大值 1111,1111=255D=
    FFH,最大值用16进制表示就是FF每个内存单元,所以看到的中间的数据也是两位数的.

  • 中间的 ‘-’ 号为了方便查询数据,介于第八个和第九个之间

  • 右边的是对应的ASCALL码,46对应的ASCALL码就是F,没有的用 . 代替

  • 再来测测 D 1000:1

可以看到还是显示128个数据,还是从16的倍数开始,不在范围的就不显示

  • 连续输入 D 命令查看后续的128个数据,一进入输入D命令查看的是Debug初始的
    命令

  • D CS:IPstart IPend/IPStart 指定查看位置与某个位置
    例如 D 1000:0 9,不再多述

③E命令,改变内存的内容

  • E CS:IP 数据1,数据2……

  • E CS:IP 一个一个修改

  • E CS:IP ‘A’ 插入字符 或者 “ABC” 插入字符串

  • E命令将机器码写入内存

    机器码             汇编指令
    b80100          mov ax,0001
    b90200          mov cx,0002
    10cb            add ax,cx
    

③用 U命令查看所在内存的汇编形式 U CS:IP

  • 前面三个指令,第一和第二都各占3个字节,第三个占2个字节,
  • 计算机怎么知道多少个字节的数据代表什么指令???

④用T命令执行内存所对应的汇编指令

  • 1,把汇编指令对应的机器码写入内存,用E命令 e 1000:0 b8 01 00 b9 02 00 10 cb
  • 2,将CS,IP的值指向汇编指令起始地址,用R命令 r cs —> 1000 r ip —> 0
  • 3,执行T指令

  • 执行 mov ax,0001后,ax寄存器的值变为了0001,但是第二条语句mov cx,0002并没有执行,
    并且 IP的值 + (mov ax,0001)的指令所占字节大小,即+3,变成了IP=0003
  • IP的值自动增加,现在再次执行 T 命令

可以看到IP的值有加上了前一条指令(mov cx,0002)所占大小即+3,变成了IP=0006

⑤A命令,以汇编形式将数据写入内存

  • A CS:IP 然后一个一个输入汇编指令

  • 遇到了插入汇编回车时报错,重启Debug后又没问题了,可以看到数据插入成功了

你可能感兴趣的:(汇编)