用Soft-ICE实现源码级调试


在 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 实现源码调试,具体的实现如下:

  1. 首先,在编译的时候要生成带符号信息的 Object 文件,这需要打开 ML 程序的两个选项
    ML /coff /Zi ...
    /coff 告诉编译器产生符号调试格式的 Object 文件。
    /Zi 使 Object 文件中包括符号调试信息。
  2. 然后也要设置 Link 文件,因为 Soft-ICE 使用 CodeView 格式的调试信息,所以 Link 也要包括下面的选项
    Link /DEBUG /DEBUGTYPE:CV ...
    /DEBUG 选项告诉 Link 在 exe 文件中包含调试信息。
    /DEBUGTYPE:CV 当然是调试信息要用 CodeView 格式啦。
  3. 最后,就是如何使用 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 来享受源代码调试的乐趣了。
  4. 别的一些必要的设置:你必须把 Soft-ICE 的目录和 Masm 的 bin 目录设置到 path 中,因为这些路径中还有些文件要用到。




(C) Copyright by LuoYunBin's Win32 ASM Page,http://asm.yeah.net