来源(Iczelion 的 Win32asm 教程)

[资料 from asm.yeah.net] 用Soft-ICE实现源码级调试

作者:罗云彬·发布日期:2000-7-21·阅读次数:7879

Win32汇编编程

在 Windows 编程中,Soft-ICE 是一件必不可少的调试工具,但 Windows 程序的编程中有很多的时候是和数据结构和 API 打交道,经过编译以后,原来的 mov stRect.left,eax 之类的代码也就变成了 mov [xxxx],eax,invoke UpdateWindow,hWnd 之类的语句也就变成了 push [xxxx]/call [xxxxx] 之类的语句,如果你不记的源程序了,你就根本无法知道你在向什么数据写或者调用什么 API,在 C++ 编程的时候,我们都可以进行源代码级别的跟踪调试,但在汇编中,这可能吗?
答案是可以的,用 Soft-ICE 就可以实现,本文讨论使用 Masm 的情况下用 Soft-ICE 实现源码调试,具体的实现如下:

首先,在编译的时候要生成带符号信息的 Object 文件,这需要打开 ML 程序的两个选项

ML /coff /Zi ...

/coff 告诉编译器产生符号调试格式的 Object 文件。
/Zi 使 Object 文件中包括符号调试信息。

然后也要设置 Link 文件,因为 Soft-ICE 使用 CodeView 格式的调试信息,所以 Link 也要包括下面的选项

Link /DEBUG /DEBUGTYPE:CV ...

/DEBUG 选项告诉 Link 在 exe 文件中包含调试信息。
/DEBUGTYPE:CV 当然是调试信息要用 CodeView 格式啦。

最后,就是如何使用 Soft-ICE 了,如果要使用符号调试功能,你不能再用 Loader32.exe 程序来装入 exe 文件,而是必须用符号转换程序 nmsym,使用方法是在命令行中打入 nmsym /translate:source,package,always /source:. /load:execute,break 你的exe文件,你可以把它编写成一个 bat 文件如下 nmsym /translate:source,package,always /source:. /load:execute,break %1,假定文件名为 debug.bat ,然后你就可以用 debug xxx.exe 来享受源代码调试的乐趣了。
别的一些必要的设置:你必须把 Soft-ICE 的目录和 Masm 的 bin 目录设置到 path 中,因为这些路径中还有些文件要用到。

Link: http://www.asm32.net/article_details.aspx?id=2618