Dependency Walker使用说明

在Windows世界中,有无数块活动的大陆,它们都有一个共同的名字——动态链接库。现在就让我们走进这些神奇的活动大陆,找出它们隐藏已久的秘密吧!

初窥门径:Windows的基石

  随便打开一个系统目录,一眼望去就能看到很多扩展名DLL的文件,这些就是经常说的“动态链接库”,DLL是Dynamic Link Library(即“动态链接库”)的缩写。从Microsoft公司推出首个版本的Windows以来,动态链接库就一直是这个操作系统的基础。

1.看看DLL里有什么

  与其用晦涩的专业术语来解决DLL是什么,不如先来看看DLL里有什么。DLL和EXE文件一样,其中包含的也是程序的二进制执行代码和程序所需的资源(比如图标、对话框、字符串等),可是为什么要把代码放在DLL里面,而不是做成EXE呢?其实DLL中的代码是以API函数形式出现的,通俗地说,DLL中包含的程序代码都被做成了一个个小模块,应用程序通过按下所需DLL中特定的按钮,来调用DLL中这个按钮所代表的功能。在使用“记事本”等程序时,如果要保存文件或打开文件,就会弹出通用文件对话框,让我们选择文件位置。你可知道,这就是调用了系统底层DLL中的通用对话框界面。

2.系统中几个重要的DLL

  Windows中有3个非常重要的底层DLL: Kernel32.dll、User32.dll、GDI32.dll。其中Kernel32.dll顾名思义就是内核相关的功能,主要包含用于管理内存、进程和线程的函数;而User32.dll中包含的则是用于执行用户界面任务的函数,比如把用户的鼠标点击操作传递给窗口,以便窗口根据用户的点击来执行预定的事件;GDI32.dll的名称用了缩写,全称是Graphical Device Interface(图形设备接口),包含用于画图和显示文本的函数,比如要显示一个程序窗口,就调用了其中的函数来画这个窗口。

3.为什么要用DLL

  刚才在谈到这个问题的时候,我们只是解释了DLL将程序代码封装成函数的原理。为什么封装成函数,就能成为系统中大量使用DLL的理由呢?

  ①扩展应用程序

  由于DLL能被应用程序动态载入内存。所以,应用程序可以在需要时才将DLL载入到内存中,这让程序的可维护性变得很高。比如QQ的视频功能需要升级,那么负责编写QQ的程序员不必将QQ所有代码都重写,只需将视频功能相关的DLL文件重写即可。

  ②便于程序员合作

  这个和我们最终用户关系不大,仅供了解。我们都知道编程工具有很多,比如VB、VC、Delphi等,如果好几个人合作来编写一个大的程序,那么可能有的人用VB,有的人用VC,每人负责的部分所使用的编程语言都不同,究竟放在哪个编译器中进行编译呢?这就好比一群来自各个国家的人在共同编写一篇文章,如果他们所使用的语言都不同,写出来的文章怎么可能凑到一起呢?而有了DLL后,可以让VC程序员写一个DLL,然后VB程序员在程序中调用,无需为怎么将它们都编译为一个单独的EXE而发愁了。

  ③节省内存

  如果多个应用程序调用的是同一个动态链接库,那么这个DLL文件不会被重复多次装入内存中,而是由这些应用程序共享同一个已载入内存的DLL。就好比一个办公室中,很少会为每一个员工配置一台饮水机的,而是在一个公共位置放上一个饮水机,所有需要喝水的职员都可以共用这台饮水机,降低了成本又节约了空间。

  ④共享程序资源

  包括刚才提到过的通用文件对话框在内,DLL文件提供了应用程序间共享资源的可能。资源可以是程序对话框、字符串、图标,或者声音文件等。

  ⑤解决应用程序本地化问题

  在下载了某个程序的汉化包后,打开汉化说明,经常可以看到用下载包中的DLL文件覆盖掉程序原来的DLL,汉化就完成了。这些程序都是将执行代码和应用程序界面分开编写了,所以汉化者只需简单地将其中和程序界面相关的DLL汉化并发布即可。

时间: 2024-11-11 15:11:58

Dependency Walker使用说明的相关文章

Dependency Walker使用说明 转载

转载地址:http://blog.csdn.net/swort_177/article/details/5426848?reload 在Windows世界中,有无数块活动的大陆,它们都有一个共同的名字——动态链接库.现在就让我们走进这些神奇的活动大陆,找出它们隐藏已久的秘密吧! 初窥门径:Windows的基石 随便打开一个系统目录,一眼望去就能看到很多扩展名DLL的文件,这些就是经常说的“动态链接库”,DLL是Dynamic Link Library(即“动态链接库”)的缩写.从Microsof

Dependency Walker使用说明[转]

在Windows世界中,有无数块活动的大陆,它们都有一个共同的名字--动态链接库.现在就让我们走进这些神奇的活动大陆,找出它们隐藏已久的秘密吧! 初窥门径:Windows的基石 随便打开一个系统目录,一眼望去就能看到很多扩展名DLL的文件,这些就是经常说的"动态链接库",DLL是Dynamic Link Library(即"动态链接库")的缩写.从Microsoft公司推出首个版本的Windows以来,动态链接库就一直是这个操作系统的基础. 1.看看DLL里有什么

关于DLL调试的两个工具(dependency walker和dumpbin.exe)

Dependency Walker工具: 该工具用来查看dll依赖库和依赖库内的函数. 左上角:模块依赖树,表示该dll所依赖的其它dll文件 右上角:导入函数,即与当前根模块有关系的函数(即根模块或根模块的子模块使用到的模块) 右中间:导出函数,即当前模块所有可以导出的函数(即可以被外界调用的函数). 下面:模块列表视图,用于显示所依赖的dll模块的信息,如果加载错误会红色标出 最下面:日志视图,显示出错模块的信息 具体查看:如何使用查看DLL神器DependencyWalker 另一篇文章生

Windows下程序打包发布时的小技巧(使用Dependency Walker侦测不理想,改用VS自带的dumpbin则万无一失,还可查看dll导出的函数)

Windows下开发的应用程序在发布时,需要将其依赖的一些动态链接库一起打进安装包里面去.这个时候,快速确定这个程序到底依赖哪些动态链接库变得非常重要.很久以前写过一篇关于Qt程序安装包制作的博客,里面介绍了Dependency Walker这个小工具.但是实际操作起来并不理想,因为Dependency Walker将exe文件依赖的所有动态库以及动态库所依赖的动态库都列出来了.看得你一脸懵逼: 你很难分清楚:倒底哪些DLL是需要打包的,哪些DLL是系统自带的.而作为打包过程中的一个小步骤,我根

Dependency Walker简介

如果软件复杂,那么依赖关系的整理是一个很严重的问题,软件设计到的模块可能存在多个版本,可能在不断的改动;如果版本对不上或者有依赖文件丢失, 那么就需要这样一个工具来协助判断哪里出了问题. 软件的主窗口截图如下: 截图的标号分别对应于: 1.  常用工具栏 工具栏按钮功能分别是 Open(打开): 打开(dll/exe)以查看依赖关系,或者保存的视图 Save(保存): 保存打开的文件视图,保存的视图可以重新打开 Copy(拷贝): 将选中的内容拷贝为文本 Auto Expand(自动展开): 自

Dependency Walker +Everything查找DLL文件加载不上的问题

软件开发过程中,经常会出现DLL文件模块加载不上的情况,这时候通常采用Dependency Walker软件查找问题,直接打开Dependency Walker安装包运行depends.exe即可. 在Dependency Walker界面上主要分为三块:左侧树状栏.右侧函数输入输出分栏.底侧模块栏. 左侧树状栏:该DLL依赖了那些DLL 右侧函数输入输出分栏:该DLL调用函数列表 底侧模块栏:依赖的DLL具体说明情况 DLL文件模块加载不上最常见的情况就是依赖的DLL文件不存在,这时候错误提示

DLL详解及Denpendcy Walker的使用

下面的文章被N次转载,为了尊重原作,\(^o^)/~,贴出最早发布这篇文章的地址及作者.   动态链接库 Windows的活动大陆 2006-07-26 09:21  作者:狂ρκ来源:电脑爱好者 在Windows世界中,有无数块活动的大陆,它们都有一个共同的名字--动态链接库.现在就让我们走进这些神奇的活动大陆,找出它们隐藏已久的秘密吧! 初窥门径:Windows的基石 随便打开一个系统目录,一眼望去就能看到很多扩展名DLL的文件,这些就是经常说的"动态链接库",DLL是Dynami

基于SNMP的MIB扩展方法研究

文章较长,此文章背景:毕业设计,直接去搜索我的毕业设计选题,当时还傻傻的用百度,在百度文库和CSDN等下载了很多论文.搜索到的论文有以下几种: 1)完全胡扯,听说MIB“树状”模型,直接就有写ta用二叉树实现了,恩,我上次用了Java和氧化还原反应成功拿到抓到外星人,你信不信? 2)介绍了很多知识背景,然后一下子ta们就实现了,他们做了什么工作很少涉及. 3)有位盆友一直写自己在做这件事情,ta也说网上有很多方法,但是没有有价值的方法,ta决定实现一个,但是,ta再也没有更新ta的博客.o(╯□

GitHub上整理的一些工具,求补充

http://segmentfault.com/q/1010000002404545 技术站点 Hacker News:非常棒的针对编程的链接聚合网站 Programming reddit:同上 MSDN:微软相关的官方技术集中地,主要是文档类 infoq:企业级应用,关注软件开发领域 OSChina:开源技术社区,开源方面做的不错哦 cnblogs,51cto,csdn:常见的技术社区,各有专长 stackoverflow:IT技术问答网站 GitHub:全球最大的源代码管理平台,很多知名开源