众所周知: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.红色线框的窗口,里面的内容以类似目录树的表示方法,显示的是模块之间的从属关系,点击节点上的"+"或"-"号,可以将分支展开或折叠.这实际上也显示了模块的调用关系,例如大名鼎鼎的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中找到.