title: 汇编-debug的基础指令
date: 2019-03-18 15:20:08
tags:
categories: 汇编

debug的使用:

可以使用debug查看CPU各种寄存中的内容,内存的情况和在机器码级跟踪程序的运行。

debug的使用:

可以使用debug查看CPU各种寄存中的内容,内存的情况和在机器码级跟踪程序的运行。

debug功能:(常见的六个)

R命令:查看、改变CPU寄存器的内容

r1

r2

D命令:查看内存中的内容

d1

左边是内存地址 ,内存地址中的对应的内容 右边是ASCII编码 (数字符号,英语字母,标点符号)

展示128个字节

也可以使用下面的指令修改

d2

使用d命令只当查看范围后,接着使用d命令,可列出后续的内容

d3

U命令:将内存中的机器指令翻译成汇编指令

u1

u2

A指令:以汇编指令的格式在内存中写入一条机器指令

a1

可以在指定位置写入

a2

T指令:执行一条及其指令

执行的位置是cs:ip指向的位置

例如我们要执行 2000:0 位置的指令

t1

之后就可以执行

t2

E命令:改写内存中的内容

方式1:

e1

方式2:以提问式的方式

e2

  1. 输入e 2000:0 之后回车,将显示起始地址(图中为2000:0000)和第一个单元(2000:0000)的原始内容(B8),光标将会出现在“.”的后面,

  2. 此时输入值然后空格可改写原有的内容;不输入直接空格表示不对当前单元改写。

  3. 输入空格后将自动跳到下一个单元。

  4. 改写完毕后回车结束e命令

e指令还可以结合ASCLL码使用

e3

可以看到存到内存中的是字符对应的ASCLL码

例如 0对应30H(十进制的48) a对应61H(十进制的97)A对应41H(十进制的65)

小知识: 可以按住alt键打出ASCLL码指对应的符号

按住alt 输入48 松开 alt,就打出了0, 写65 可以输出对应A

e4

我们还可以用e命令向内存中写入字符串

使用e命令向内存中写入机器码,然后用u指令翻译成汇编指令

e5

补充:

g命令与p命令

G命令的使用方法是:G [=起始地址] [断点地址],意思是从起始地址开始执行到断点地址。如果不设置断点,则程序一直运行到中止指令才停止。

例如:g 0012 表示将debug从当前的CS:IP指向的指令执行,一直到(IP)=0012h为止

实例:

在设置完内存数据并且输入完程序后运行这些汇编代码。在DEBUG中执行命令G=100,观看运行结果。

g1

汇编程序运行后在屏幕上显示出“ABCD”四个字符。

接下来在DEBUG中执行G=100 10B,意思是从地址CS:100开始,一直运行到CS:10B停止。观看运行结果。

命令执行后,不但显示出字符串“ABCD”,而且列出当前寄存器和标志位的值。

g2

g命令在loop中的使用:

使用loop循环时,如果要运行到跳出循环执行后面的代码,(即不用一次次按t一步步执行循环到循环结束)可以先用u命令查看代码的偏移地址,在用g命令跳转到此偏移到此代码处,如下:

g3

用u命令可以看到循环的命令后的地址位于0b40:000B,所以要跳出循环就用 g 000B 即可

p指令

使用p指令,debug就会自动重复执行循环中的指令,直到(cx)=0为止

转移指令

jmp

call 将读取该指令后改变的ip保存下来,并执行跳转 ret从内存中拿回保存的地址