debug常用命令

发布时间 2023-10-13 20:17:59作者: sakuraLGGM

debug常用命令

参考教程

https://blog.csdn.net/happylzs2008/article/details/113825836

挂载硬盘

mount c: d:/masm
c:
dir

image-20231013161926885

生成可执行文件

masm sample.asm ; 后缀名可省略
link sample.obj
sample.exe

r 查看和修改寄存器

查看:最后一行是下一条要执行的命令

image-20231013164851797

修改寄存器内容r 要修改的寄存器 r ax --修改ax的内容

image-20231013165054511

a 输入汇编指令

a 偏移地址,修改命令,两次回车退出,默认为代码段

或者直接a 偏移地址 新命令,两次回车退出

a 100 --从代码段的偏移100H处输入指令
a 0100:0010 --从0100段的0010偏移处输入指令

a19ee:0029 db 'backward.':从ds:19ee开始执行db指令,修改内存

u 查看汇编指令

  1. 命令用法

    u 100 --从代码段的偏移100H处查看指令

    u 0100:0010 --从0100段的0010偏移处查看指令

    开始输入u默认从cs:0000开始查看,显示若干行。再次输入u时显示接下来的地址存的指令

  2. 显示的内容的格式:

    段地址:偏移地址 机器指令 汇编指令操作码 汇编指令操作数

    所有的二进制串都是用16进制表示的

    image-20231013153023469

d 显示数据段内容

  1. 命令用法

    d 100 --查看数据段的偏移100H处的数据

    d 0100:0010 --查看0100段的0010偏移处的数据

  2. 显示的内容格式

    段地址:偏移地址 8字节的数据-8字节的数据(16进制表示) 每个字节的内容

    字节的内容和16进制表示是一一对应的。如果一个字节的内容可读,则将字符显示出来,否则显示为.

    每一行显示16字节的数据,下一行显示接下来的16字节的数据。

    比如第一行就是0000~000F

    0000:4D,0001:6F,...,0007:65,0008:20,0009:63,...,000F:20

    image-20231013154904051

e 修改内存

e29:从数据段(默认)的偏移地址0029H开始修改

  1. 逐个字节修改,按空格修改下一个字节,结束修改按回车。注意这里有两行是按空格出来的,不是回车,回车就直接结束了!

    image-20231013161505995

  2. 输入修改的内容 e29 'forward'20

f 修改内存

F命令作用:使用指定的值填充指定内存区域中的地址。
F命令的使用方式为:F [范围] [填充列表]
输入以下命令:F 1AF5:100 L20 1 2 3 4 5执行命令D 1AF5:100观看命令执行结果。
在这里插入图片描述
说明:该命令是用字节序列01、02、03、04、05轮流填充从1AF5:100开始长度为20H的内存区域。
F 1AF5:100 13F 41 42 43 44
在这里插入图片描述
说明:该命令是用字节序列41、42、43、44轮流填充从1AF5:100开始一直到1AF5:13F的内存区域。

g 运行程序

g偏移地址:执行到断点处,断点这一行不执行

t 单步调试

t --执行当前所存放地址处的指令

t 100 --执行100条指令

注意:cs存放的是代码指令的段地址(即首条指令的地址),ip存放的是下一条要执行的指令的偏移。

t命令相当于image-20231013193738491第三个step in功能,会默认从cs:ip开始一步步执行指令,遇到子程序,也会进入里面一步步执行再返回

用法:t [=地址] [指令数],地址前要加等号且默认是cs:ip,不加等号的数字被认为是指令数,指令数默认是1

image-20231013200703192

上图中最后一行是下一条要执行的指令

p 单步执行

p命令相当于image-20231013193738491第二个step over功能,大多数情况与t一样,只有当遇到call调用子程序的时候,p命令直接执行完这个程序,而t命令会进入里面一步步执行

image-20231013200757205

q 退出debug