众所周知:Windows的很多应用程序都是不但有可执行的EXE文件,而且还需要有辅助模块,这些模块形形色色,品类颇杂,其中名声最大的就数动态连接库(DLL)了,另外还有:ocx、sys等等.像应用程序可以分成16位、32位、64位程序一样,模块也分为16位、32位、和64位模块.因删除应用程序或可执行文件时,相关的动态链结库或模块往往不能删除干净,时间一长,形成许多使人生厌的"垃圾文件".所以,通常很多使用windows的人对DLL文件的关心都集中在研究哪些是有用的,哪些是无用的,以期准确地删除无用部分,即完成所谓的系统减肥,不过,这不是本次讨论的中心,我们的目的是从另一个方面研究模块文件,下面提到的,就是一个这样的工具.
a.简介
Windows2000专业版的Support Tools中有一个专门分析模块文件的工具,其英文名字是:Dependency Walker,直译是"从属漫步者",这个名字无论如何都透着别扭,不符合中文表达的特点.通过使用验证和查看参考资料,把它进行引申,翻译为"模块解析工具"较为合适些.与上述为系统减肥的目的不同,模块解析工具可以探测出:模块的从属关系、建立者、功能接口、调用关系、甚至生成模块文件所使用的编程语言、程序链结时用的链结器版本等等信息,解析出的从属关系是用一个类似目录树的图标格式显示出来的.当然还能显示运行模块至少需要使用哪些关联文件,连同文件的完整路径、基本地址、版本号、计算机类型、Debug信息以及其它等等信息,可谓是方方面面、应有尽有.
从这些信息的性质不难看出,对系统管理员、系统测试者、编程人员、自动安装脚本编写人员来说,这类信息用处大些.对普通的使用者,用处小些.但也非无可所用.普通使用者可以用这些解析结果来排除由于模块引起的系统故障,模块导致的系统故障主要包括:
1.模块丢失.
2.无效模块.
3.执行的出口/入口搭配错误.
4.循环错误.
5.模块与计算机类型的搭配错误.
尽管该工具是win2k的支持工具,但也能运行在win9x、winNT3.51、winNT4.0的操作系统环境中,甚至还包括windows CE.目前Dependency Walker的最新版本是2.0.该版本只支持解析32位或64位模块,已经不支持16位模块了.
b.用法略谈
与其它工具不同,这个工具只有GUI界面的版本而没有命令行版本.如果你已经安装了Support Tools,可以这样打开:"开始->程序->Support Tools->Tools->Dependency Walker ".这也是一个英文界面的工具,并有英文帮助文件供参考.下面简单介绍一下使用方法:
1.首先用鼠标点击”File|Open”.
2.打开一个要解析的EXE、DLL、OCX或SYS文件,找好之后,鼠标双击文件名.
3.双击后,原来空空如也的窗口立刻"热闹"起来,显示出对选定模块的解析结果.下面的图形(图1)是我在自己现在使用的这台机器上,对一个抓图软件SnagIt5主程序SnagIt32.exe的解析结果.图中矩形或椭圆形的彩色框是我自己加上去的,意在便于后面的讲解中作为标识.
一共分成五个窗口,以五种颜色的矩形线框来标识,
1.红色线框的窗口,里面的内容以类似目录树的表示方法,显示的是模块之间的从属关系,点击节点上的"+"或"-"号,可以将分支展开或折叠.这实际上也显示了模块的调用关系,例如大名鼎鼎的KERNEL32.DLL就不止在一处出现,也就是说,这个模块被多次或多处调用.
2.蓝色线框的窗口.显示的是选定模块(即红色线框中的蓝色光标选定的模块)的信息:这些信息有:序号,线索号,函数及登录指针.
3.绿色线框中显示的是以C++语言为基准解析的模块信息:项目与上面相同但表示方法不同,最明显的是函数部分,列出了假定原程序是以C++环境开发时模块使用的C++函数名称,这对于编程人员进行模块分析很有用处.其余的与上面相似.
4.这是与第一个红色线框内容对应窗口,但所包含的信息更多更细.该窗口显示信息整理结果如下表:
项目名称
简介
项目名称
简介
模块名称
DLL文件名称
首地址
以十六进制表示的地址
文件时间标志
文件建立时间
真实地址
(未见显示有效信息)
连接时间标志
文件链结时间
实际大小
以十六进制表示
文件大小
无需解释
装入次序
一般仅显示是否装入
属性
即只读隐藏等属性
文件版本
本行以下无需解释
连接校验和
链结检验
产品版本
真实校验和
亦用于检验目的
图标文件版本
CPU类型
无需解释
链接器版本
子系统
所属系统
操作系统版本
符号
其作用不详
子系统版本
5.黄色矩形线框是显示错误信息的,如果你选定一个16位的模块文件,由于该工具不支持16位模块解析,这个窗口就会显示相关的错误信息.
当解析一个模块文件时,菜单上显示的项目比上图会多出3项:Edit、windows和Profile,其中的Edit很容易使用.Windiws的作用更不用说了.只是Profile比较生疏,图2中将它以青色椭圆框标出,这是一个建立所谓"轮廓文件"的选项.
对图2显示的菜单项目,这里难以逐一介绍用法,实际上也无完全介绍的必要,所以只介绍较主要的2项:
1.View:这一项确定显示哪些解析信息,打开后的情况如图3: 可供显示的项目有很多种类,有关于计算机环境方面的信息,例如系统信息等;也有窗口布局方面的,如工具条状态条等;更多的还是关于选定模块的信息,你根据需要以鼠标点击相应的项目,就可以将对应信息显示出来.
2. Profile:建立"轮廓文件",图4是点击该项后出现的对话框.只要输入相应的参数并对列出项目选定,就可以产生一个相应的轮廓文件.关于轮廓文件的作用以及相关的知识,请自己查找相应的参考资料.
C.结语
Dependency Walker能解析的信息很多,特别是对程序设计中关于动态连接库程序的调试用处很大.该工具提供详细英文帮助文件.帮助文件在Dependency Walker打开的时候可以使用,但即使不打开Dependency Walker,也可以单独使用,打开帮助文件的路径可以在Tools Help中找到.