title: 汇编-debug的基础指令
date: 2019-03-18 15:20:08
tags:
categories: 汇编
debug的使用:
可以使用debug查看CPU各种寄存中的内容,内存的情况和在机器码级跟踪程序的运行。
debug的使用:
可以使用debug查看CPU各种寄存中的内容,内存的情况和在机器码级跟踪程序的运行。
debug功能:(常见的六个)
R命令:查看、改变CPU寄存器的内容
D命令:查看内存中的内容
左边是内存地址 ,内存地址中的对应的内容 右边是ASCII编码 (数字符号,英语字母,标点符号)
展示128个字节
也可以使用下面的指令修改
使用d命令只当查看范围后,接着使用d命令,可列出后续的内容
U命令:将内存中的机器指令翻译成汇编指令
A指令:以汇编指令的格式在内存中写入一条机器指令
可以在指定位置写入
T指令:执行一条及其指令
执行的位置是cs:ip指向的位置
例如我们要执行 2000:0 位置的指令
之后就可以执行
E命令:改写内存中的内容
方式1:
方式2:以提问式的方式
输入e 2000:0 之后回车,将显示起始地址(图中为2000:0000)和第一个单元(2000:0000)的原始内容(B8),光标将会出现在“.”的后面,
此时输入值然后空格可改写原有的内容;不输入直接空格表示不对当前单元改写。
输入空格后将自动跳到下一个单元。
改写完毕后回车结束e命令
e指令还可以结合ASCLL码使用
可以看到存到内存中的是字符对应的ASCLL码
例如 0对应30H(十进制的48) a对应61H(十进制的97)A对应41H(十进制的65)
小知识: 可以按住alt键打出ASCLL码指对应的符号
按住alt 输入48 松开 alt,就打出了0, 写65 可以输出对应A
我们还可以用e命令向内存中写入字符串
使用e命令向内存中写入机器码,然后用u指令翻译成汇编指令
补充:
g命令与p命令
G命令的使用方法是:G [=起始地址] [断点地址],意思是从起始地址开始执行到断点地址。如果不设置断点,则程序一直运行到中止指令才停止。
例如:g 0012 表示将debug从当前的CS:IP指向的指令执行,一直到(IP)=0012h为止
实例:
在设置完内存数据并且输入完程序后运行这些汇编代码。在DEBUG中执行命令G=100,观看运行结果。
汇编程序运行后在屏幕上显示出“ABCD”四个字符。
接下来在DEBUG中执行G=100 10B,意思是从地址CS:100开始,一直运行到CS:10B停止。观看运行结果。
命令执行后,不但显示出字符串“ABCD”,而且列出当前寄存器和标志位的值。
g命令在loop中的使用:
使用loop循环时,如果要运行到跳出循环执行后面的代码,(即不用一次次按t一步步执行循环到循环结束)可以先用u命令查看代码的偏移地址,在用g命令跳转到此偏移到此代码处,如下:
用u命令可以看到循环的命令后的地址位于0b40:000B,所以要跳出循环就用 g 000B 即可
p指令
使用p指令,debug就会自动重复执行循环中的指令,直到(cx)=0为止
转移指令
jmp
call 将读取该指令后改变的ip保存下来,并执行跳转 ret从内存中拿回保存的地址