本文为Johnpher原创,转载请声明。
使用MASM6.1中的ML汇编器来汇编程序,需要在MS-DOS的DOS提示符下输入:
Ps:
ml不会像其他的集成开发环境一样在打开编译器后产生一个非常友好的界面,允许你导入自己的源文件之后再进行编译。Ml必须通过DOS的命令实现汇编。如果直接打开ml,则在MS-DOS下会提示:
usage : ML [options] filelist [/link linkoptions]
Run “ML/help” or “ML/?” for more info
ml /c /coff example.asm中各参数的含义为:
/c Assemble without linking
/coff generate COFF(Common Object file format) formate object file
如果程序没有什么错误,那么在DOS提示符下会出现如下信息:
Microsoft (R) Macro Assembler Version 6.11
Copyright (C) Microsoft Corp 1981-1993. All rights Reserved.
Assembling : example.asm
文件EXAMPLE.OBJ 将会加到文件目录中。如果程序有错误,错误信息会显示出来,并生成no.obj文件。
链接时同样道理,在MS-DOS中输入
Link /subsystem:console /entry:start /out:example.exe example.obj io.obj kernel32.lib
即可。
要使用Windbg,必须在ML后加上 /Zi (Add Symbolic Debug info)转换参数,告诉汇编器在输出时添加调试信息。此时,汇编命令如下:
ml /c /coff /Zi example.asm
连接器则加了一个转换参数 /debug ,如下
link /debug /subsystem:console /entry:start /out:example.exe example.obj io.obj kernel32.lib
在Windbg调试时只需选择File-OpenExecutable即可。
点击StepInto然后再弹出的对话框中选择Enter,如果为出现某行高亮显示的源代码窗口,则再次单击StepInto,然后将Command窗口最小化,即可看到带有高亮显示的源文件,按F11即可进行跟踪。
有时单击StepInto后无法进入代码调试界面,一般需要将原来生成的文件全部清除,再重新生成即可。
另外,编译时加上 /Fl 参数生成的 .lst 文件对于调试十分重要。
在调试的过程中,需要监视内存中的变量,可以之间点击Memory Window或者使用快捷键Alt+5,在弹出的Memory Options窗口中填写要监视内存的起始地址,选择显示格式即可。
填写内存地址时可直接将编译过程中生成的.lst对应的内存地址写入,也可以使用取地址符加变量名称的方式,如&temp。
内存监视窗口的数据一般分为两部分,左边是16进制格式的内存数据,右边是根据所选择类型显示的对应类型的数据。