文章网址:http://www.dependencywalker.com/help/html/dependency_types.htm
有以下几种模块依赖类型:
1. 隐式依赖(也叫加载时依赖,有时也不当地称为静态依赖):模块A在编译、链接期间隐式地与模块B中的a.lib链接,那么模块A的源码就调用了B中的一个或多个函数。模块B就是模块A的加载时依赖。不管A在运行期间有没有调用B中的函数,B都会被加载进内存。模块B将会被列在模块A的导入表中。
2. 延迟加载依赖:模块A在编译、链接期间延迟与模块B中的a.lib链接,那么模块A的源码就调用了B中的一个或多个函数。模块B就是一个动态依赖,只有当A在运行时调用了B时,B才被加载。模块B列在了A的延迟加载导入表中。
3. 前向依赖:模块A在编译、链接期间与模块B中的a.lib链接,那么模块A的源码就调用了B中的一个或多个函数。而其中的函数实际上又调用了模块C中的函数。那么B,C都是A的依赖,但是只有模块B被列进了A的导入表中。
4. 显式依赖(也称为动态依赖或运行时依赖):模块A没有在编译、链接期间隐式地与模块B链接。A在运行时通过调用LoadLibrary类型的函数调用了B,则B就成了A的运行时依赖,但不被列在A的任何人表中。这种类型的依赖在OCXs,COM对象和Visual Basic程序常见。
5. 系统钩子依赖(也叫注入依赖):当另一个程序在进程中抛出了一个特定事件(像鼠标事件)时,这种依赖就产生了。当进程去处理那个事件时,操作系统就往进程注入了这个模块去处理事件。被注入的模块实际上不是任何其它模块的依赖,但它确实驻留在进程的地址空间中。
DW完全支持以上几种技术加载的模块。在DW中打开一个模块,就能检测出1、2、3三种类型的模块。4、5两种类型的依赖需要在运行时被解析,这也是DW2.0的新特性。关于解析,参考使用应用程序解析检测动态依赖一节。