仅作为个人学习笔记
挂在文件这些操作就不说了吧,一张图就够了
进入虚拟c盘,输入debug。
接下来先了解一下常用的一些debug中的命令。(命令不区分大小写)
一、查看、修改CPU中寄存器的内容:R命令。
1.直接输入r,查看寄存器中的内容:
2.改变寄存器中的内容:
可以观察到ax中的内容由0000改变成了ab23。
二、查看内存中的内容:D命令。
1.直接输入d,可以查看预设地址内存处的128个字节的内容:
输入r查看的内容中最下面一行就是当前所在的地址,即073f:0100,再输入d查看的就是起始地址为073f:0100的128个字节的内容,继续输入d,会列出挨着的地址(073f:0170)后的128个字节的内容。
2.列出指定地址的内容:
3.列出指定地址内容和范围:
三、修改内存中的内容:E命令。(可以写入数据、指令,内存中,数据和指令都是机器码,没什么区别)
1.写入数据(需指明地址,和要写入的数据):
我试过了,每个字节间的数据要加空格,不然就像图片里一样报错了。
2.逐个询问修改数据:
输入这个地址,他会告诉你这个地址的内容(上面第一步,我在2000:0000中写入了12)是什么,然后输入数据进行修改,修改之后若是想对下一个字节的内容进行修改,敲空格就好了
可以看到原来的2000:0000的内容是12 ab 79,修改了前两个字节的内容,结果变成了f3 c5 79。
四、将内存中的机器指令翻译成汇编指令:U命令。
步骤:
e地址输入数据
d地址查看
u地址查看机器码翻译的汇编指令
汇编指令
mov ax,0123H
mov bx,0003H
mov ax,bx
add ax,bx
对应的机器码
B8 23 01
BB 03 00
89 D8
01 D8
实验效果
`
``
在内存中输入的机器码,变成了汇编指令!!!
五、以汇编指令的格式在内存中写入机器指令:A命令。
步骤:
a地址写入汇编指令
d地址查看数据
u地址查看代码
汇编指令
mov ax,0123H
mov bx,0003H
mov ax,bx
add ax,bx
对应的机器码
B8 23 01
BB 03 00
89 D8
01 D8
实验效果
073f:0100是CS:IP的地址(CS是代码寄存器,IP是指针偏移地址寄存器)
可以看到,通过U命令可以看到汇编指令被写进去了,汇编写入内存仍然是以机器码的形式保存。
六、执行CS:IP处的指令:T命令。
注意观察每次输入t指令后,ax,bx的值变化。可以观察出t命令是使用一次执行一次汇编指令。
七、退出debug,直接输入q指令。
后续再更新其他指令。
后续更新
1.P命令,用于debug中自动重复执行循环中的指令。
2.G命令,g 偏移地址 程序自动执行到输入的偏移地址处的程序(DOSBOX系统的编译连接的那片文章末尾有讲到g命令的使用)。