Windows7 Debug Test
eryar@163.com
1.Introduction
在郁大师的影响下,很早之前买了本王爽老师的《汇编语言》,可惜一直闲置,今天终于得空,可以学习起来了。为了使学习效果更好,还是写点东西记录下来,一方面巩固下知识点,一方面起到一个监督作用。
毕竟不是计算机专业科班出身,这些计算机基础知识只有靠自学。意识到汇编的重要性是从大师可以反汇编和逆向一些软件开始的。汇编在Debug的过程中也有重要作用,如在Debug时看到这种界面,总是有想理解其意义的好奇心:
Figure 1. Disassembly and Registers in Visual Studio
通过反汇编代码,对程序的运行情况更加清晰。学习汇编的两个目的:充分获得底层编程的体验,深刻理解机器运行程序的机理。知道了来胧去脉,在应用的过程中才能更加自信。
本文主要介绍在Windows7中运行debug,并在debug程序中执行汇编代码,从而方便理论知识的学习。
2.Run Debug in Windows7
Debug是DOS, Windows提供的实模式(8086)程序的调试工具,使用它可以查看CPU各种寄存器、内存情况和在机器码级跟踪程序的运行。因为debug程序是16位的,在64位的Windows7中无法运行,所以根据网上的方法,先安装一个DOS模拟环境,再运行debug。
分别下载工具DOS BOX和32位机器上的debug,这里给出DOSBOX和MASM,其中Debug包含在MASM中。
Figure 2. DOSBox for Debug
安装好DOSBox后,将MASM放到D盘中,运行如下命令来运行Debug:
mount c d:\MASM
c:
debug
-r
就可以显示CPU中的相关信息,如下图所示:
Figure 3. Debug in DOSBox
Debug的命令比较多,下面简单介绍几个常用的:
v R命令:查看、修改CPU寄存器的内容;
v D命令:查看内存中的内容;
v A命令:以汇编指令的格式在内存中写入一条机器指令;
v T命令:执行一条机器指令;
2.1 R命令
CPU的寄存器有AX,BX,CX,DX,CS,IP等,通过R命令,可以查看这些寄存器中的信息。若要修改一个寄存器的值,比如AX中的值,可用R命令后加寄存器名来进行,输入r ax后回车,在:提示后输入一个数值即可。
Figure 4. Modify AX by R command
可以采用同样的方式来修改其他寄存器中的内容,如IP,CS等。
2.2 D命令
Debug的D命令可以查看内存中的内容,直接输入D命令后,会给出默认内存地址的信息,如下图所示:
Figure 5. D command
也可以用“d 段地址:偏移地址”来列出指定内存单元中的信息,如下图所示:
Figure 6. D command
2.3 A命令
Debug的A命令以汇编指令形式在内存中写入机器指令。这样就可以方便测试汇编代码的效果。如下图所示向1000:0中写入汇编指令:
Figure 7. Write Assembly Code by A Command
如上图所示,在A命令后跟上地址,然后就可以向相应地址中写入汇编指令。再用D命令查看内存时,就可以看到相应的机器码。有了汇编代码,如何运行呢?需要用到T命令。
2.4 T命令
T命令用于执行CS:IP指向的内存单元处的指令。所以要执行A命令写的汇编指令,需要先通过R命令修改CS和IP寄存器的内容,使他们指向A命令汇编指令所在的内存地址。如上图所示的A命令是将汇编指令写到1000:0处,所以修改CS和IP使他们指向这个地址:
Figure 8. Modify CS & IP by R command
上图所示为修改CS和IP后,通过R命令显示出结果。修改CS和IP后,就可以运行T命令来执行我们写入的指令了。
Figure 8. Run T command
运行一次T命令后,就执行了一条汇编指令,这里执行了mov ax,1,执行后CS:IP指向了下条指令的地址,这样再执行一次T命令,就执行了mov bx,2,如下图所示:
Figure 9. Run T Command
运行T命令后,执行了mov bx,2,将BX中的内容改为2了。
3.Conclusion
学习汇编语言,对理解程序的运行机理有个清晰认识,是想从事计算机科学方面工作的必不可少的基础。
通过安装DOSBox从而在Windows7中运行debug。并通过debug的几个命令来熟悉简单的汇编指令。最后通过A,R和T命令,在debug中运行汇编指令。
4.References
1. 王爽. 汇编语言. 清华大学出版社. 2013
Dowload DOSBox & MASM