关闭

源代码级调试汇编

标签: 汇编windowsobjectincludearraysddk
1358人阅读 评论(0) 收藏 举报
分类:

对喜欢ASM 的朋友来说,程序中潜在的未知错误是不可避免的也是最头痛的事情之一. 如何在ASM环境下调试程序成了整个环节中耗时很多的工作.

许多其它编译器都附带了源代码级的调试器, VC,TC大家都不会陌生, 这使得用这些高级语言调试成了一件相对easy的事情,你可以迅速进入事故现场并排除之.ASM不同,微软并没有为他提供一个集成的开发和调试环境,我们一切都得自己来!

好在我们有强大的SoftIce,这使得汇编下的调试工作变得简单,关于SICE下的源代码调试于很多文章,后面将附上罗云彬罗老的一篇介绍文章,在附带的例子里将提供Sice调试的具体实例,你要作的是修改 /hd目录下的debug.bat的内容使其指向你机器上的SICE路径,然后执行dbg.bat文件,then ok,Go!

一、TRW下的源代码调试的实现

调试的另一个选择是使用trw2000,他同样支持源代码调试.具体如何操作呢,

下载DBGLOAD插件使tr支持Coff符号调试.可从TRW的主页下载,不赘述.

首先编写一个目标程序,如win,显示一个窗口并带有一个菜单,菜单只有一项,即EXIT,在编译时打开ml的Zi选项,产生调试符号,如:

ml /c /coff /Zi win.asm

link打开两个选项:/DEBUG 和/DEBUGTYPE:CV(同时便于用SICE调试)

Link /SUBSYSTEM:.cn/ class=wordstyle>WINDOWS /DEBUG /DEBUGTYPE:CV [/MAP:win.map] win.obj res/wnd.res

呵呵,用trw2K 直接Load win.exe,trw会自动加载.pdg文件和源文件,用src调整源代码状态,终于我们在trw下也实现了源代码级调试,酷吧!

注:/MAP:win.map可不选,这里主要是为了说明下面的符号调试

附:关于mapsym的符号调试

下面用Mapsym转化.map-->.sym

mapsym.exe -ms win.map

MAPSYM是用来把链接产生的.map文件转化为tr可用的.sym文件.参数格式如下:

Usage: -> Mapsym [-nologo] [-almnst] [-c pefile] -o outfile] infile

-a include alphebatic sort arrays
-l list map file information
-e edit symbols for NTSD parser
-m use module name from infile
-n omit line number information
-nologo omit signon logo
-o outfile symbol outputfile
-s enable line number support [default]
-t include static symbols


这个文件在DDK里,如果你没有DDK可在我主页软件资源找到下载,例子里面已经内含.



按照trw的说明书如果包含行号的话,应该可以加载原文件而实现源代码调试,可惜试验未能成功,只能进行符号调试,哪位成功请指点一二.



附:二、SoftIce下的源代码调试的实现 (Author:罗云彬)
.cn/ class=wordstyle>Windows 编程中,Soft-ICE 是一件必不可少的调试工具,但 .cn/ class=wordstyle>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 中,因为这些路径中还有些文件要用到。  

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:520020次
    • 积分:6906
    • 等级:
    • 排名:第3320名
    • 原创:156篇
    • 转载:76篇
    • 译文:12篇
    • 评论:77条
    最新评论