目录
1:了解debug的6个功能
首先我们要知道什么是debug,debug其实只是汇编语言的一种调试工具,我们进入dos环境下一般直接输入debug就可以进入debug模式下的(我的电脑是64位机,所以我下载了模拟的dos32位机)。使用debug我们可以查看cpu各种寄存器的内容,内存的情况,还可以追踪程序的运行。好了,话不多说,开始进入主题。
(1)r命令,我们可以使用它查看寄存器的内容,同时也可以修改寄存器中的内容。
(2)d命令,我们可以使用它来查看内存中的内容,后面接上 段地址 : 偏移地址(物理地址=段地址*10+偏移地址)
(3)-e命令,我们可以使用它来修改内存中的内容,同样的,它的后面也要加上 段地址 : 偏移地址(这是我建议大家的)
大家会发现在每行的最后面会有一些点号,这些是显示对应的ASCII的地方,比如说,修改的内容是 :输入了41(这里的41可不是十进制,而是十六进制,换句话说汇编语言这里面的都是十六进制,然后41对应的十进制是65,后面ASCII对应的地方就会出现ASCII为65的a字符了)。
(4)-u命令 它是将机器指令转换成汇编语言的编译指令。
(5)-t命令, 执行一条机器指令。
比如说这段,我在3000:0006的地址写下了指令,如何使用-t命令开始执行,可以发现我写的指令是将AX,BX寄存器的内容修改,也确实修改了。
(6)-a命令,就是写入机器指令(我建议大家后面最好带着段地址 : 偏移地址)
2:了解CS:IP
(1)CS:IP大家如果注意到-r命令查看寄存器的内容会发现,他也在寄存器中,不过,他们两是存放指令的,假如CS内容是m,IP的内容是n,那么CPU将会从m*16+n单元开始读取指令。
(2)如果想要修改CS:IP的话,从上面我们知道CS:IP是存放指令的地方,修改就代表着跳转指令,执行跳转后的单元位置的,执行相对应的命令。这里用到的是jmp命令,它还是后面加段地址:偏移地址(注意一定要在-a命令下,不然会报错)。
大家仔细看下上面的代码,本来ax被mov修改成了1990,
后来jmp跳转到了4000:0中,而在4000:0中有个mov ax,7777的指令,
就将ax修改成了7777了,后面也是如此,
后面的mov dx,9999没有出现是因为它是在3000位置那里,
现在跳转到了4000,总不能倒着地址往后退吧
本文到此结束,如有错误还请大佬指正!!!!!