DW翻译系列:Dependency Walker处理的模块类型

文章网址: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的新特性。关于解析,参考使用应用程序解析检测动态依赖一节。

时间: 2024-11-08 20:18:16

DW翻译系列:Dependency Walker处理的模块类型的相关文章

DW翻译系列:父类导入函数列表

文章网址:http://www.dependencywalker.com/help/html/hidr_import_list_view.htm 父类导入函数列表显示了在模块依赖树型图中所选中的模块的父类导入函数的列表.父类导入函数就是指那些在当前模块中被调用的父模块的函数. 对于隐式和前向依赖,被选模块需要导出其父模块要从中导入的每一个函数.如果被选模块没有导出父模块要调用的函数,则当模块尝试加载时,一个未能解析的外部错误就会发生.参考导出函数列表可查看被选模块的导出函数. DW为每一个父类导

接口-RBAC问题 ,根据角色查出模块,在根据模块查出模块类型

问题描述 RBAC问题 ,根据角色查出模块,在根据模块查出模块类型 1, 根据角色,查询出角色可以操作的模块列表 2. 根据模块列表查询总共有多少种类型,并返回其列表 接口:List queryMoudleTypeList(int roleId): 怎么实现?

Struts 2.1.6精简实例系列教程(5):用户注册模块(整合Jquery)

学习Jquery,当然要首先去它的官方网站:http://jquery.com/,如下图.在有"download"字眼的地方下载就行,我这里下载的是当前最新的版本Jquery 1.3.2.下载解压后,其实,也就是JS文件jquery-1.3.2.min.js. Jquery最好的学习材料莫过于Jquery 1.3 API 参考文档中文版(如下图),下载地址:http://jquery-api-zh-cn.googlecode.com/files/jQueryAPI-090129.zip

Oracle ASM 翻译系列第八弹:ASM Internal ASM file extent map

当ASM创建一个文件时(例如数据库实例要求创建一个数据文件),它会以extent为单位分配空间.一旦文件被创建,ASM会传递extent映射表给数据库实例,后续数据库实例能在不和ASM实例交互的情况下访问这个文件.如果一个文件的extent需要被重新定位,比如磁盘组进行rebalance操作,ASM会告知数据库实例关于extent映射表的变更. 可以通过查询ASM实例的X$KFFXP视图来获取ASM文件extent映射表的内容.X$KFFXP视图中的每一行对应着所有处于mount状态磁盘组中每一

7.Swift教程翻译系列——控制流之循环

英文版PDF下载地址http://download.csdn.net/detail/tsingheng/7480427 Swift提供了类C语言类似的控制流结构.包括for循环和while循环来多次执行任务,if和switch语句根据不同的条件执行不同的分支代码,break和continue语句将执行流程跳转到其他语句. 除了C里面传统的for-条件-递增循环,Swift还增加了for-in循环使得遍历数组,字典,范围,字符串或者其他序列都很简单. Swift的switch语句也要比C语言的sw

Nginx系列教程:HTTP OwnerMatch模块

我编写了一个 Nginx 模块 HTTP OwnerMatch 解决了 Nginx http://www.aliyun.com/zixun/aggregation/14840.html">虚拟主机间可通过链接型文件(硬链接和符号链接)跨站访问的问题.通过这个模块可以指定每个虚拟主机的每个 Location 可以或不可以访问的哪些用户的文件. 配置文件实例 location / { root html; index index.html index.htm; omallow heiher;

ASM 翻译系列第三十二弹:自制数据抽取小工具

Find block in ASM 在本系列文章[ Where is my data]中,我已经演示了如何从ASM磁盘中定位和抽取一个Oracle的block,为了让这件事做起来不那么复杂,我又写了一个perl脚本find_block.pl来简化整个操作,只需要提供数据文件的名称和需要提取的block,这个脚本就可以输出从ASM磁盘组中抽取块的命令. find_block.pl find_block.pl是一个perl脚本,脚本里集成了dd或kfed命令来从ASM磁盘中抽取一个块,脚本可以在Li

Nginx系列教程:HTTP DAV模块

这个模块可以为Http webDAV 增加 PUT, DELETE, MKCOL, COPY 和 MOVE 等方法. 这个模块在默认编译的情况下不是被包含的,你需要在编译时指定如下参数: ./ configure --with-http_dav_module 配置范例: location / { root /data/www; client_body_temp_path /data/client_temp; dav_methods PUT DELETE MKCOL COPY MOVE; crea

Guava翻译系列之EventBus

EventBus 类解析 当我们开发软件时,各个对象之间的数据共享和合作是必须的. 但是这里比较难做的是 怎样保证消息之间的传输高效并且减少各个模块之间的耦合. 当组件的职责不清楚时,一个组件还要承担另一个组件的职责,这样的系统我们就认为是高耦合. 当我们的系统变得高耦合时,任何一个小的改动都会对系统造成影响. 为了解决设计上的问题,我们设计了基于事件的设计模型. 在事件驱动编程模型中,对象可以发布/订阅 事件. 事件监听者就是监听事件的发生,我们在第六章中已经看到过RemovalListene