如何从一个动态链接库DLL中查看接口函数

如何从一个动态链接库DLL中查看接口函数,第1张

一、动态链接库的概念 动态链接库(Dynamic Link Library,缩写为DLL)是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源。动态链接库文件的扩展名一般是dll, 也有可能是drv、sys和fon,它和可执行文件(exe)非常类似,区别在于DLL中虽然包含了可执行代码却不能单独执行,而应由Windows应用 程序直接或间接调用。

动态链接是相对于静态链接而言的。所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件 的一部分。换句话说,函数和过程的代码就在程序的exe文件中,该文件包含了运行时所需的全部代码。当多个程序都调用相同函数时,内存中就会存在这个函数 的多个拷贝,这样就浪费了宝贵的内存资源。而动态链接所调用的函数代码并没有被拷贝到应用程序的可执行文件中去,而是仅仅在其中加入了所调用函数的描述信 息(往往是一些重定位信息)。仅当应用程序被装入内存开始运行时,在Windows的管理下,才在应用程序与相应的DLL之间建立链接关系。当要执行所调 用DLL中的函数时,根据链接产生的重定位信息,Windows才转去执行DLL中相应的函数代码。

一般情况下,如果一个应用程序使 用了动态链接库,Win32系统保证内存中只有DLL的一份复制品,这是通过内存映射文件实现的。DLL首先被调入Win32系统的全局堆栈,然后映射到 调用这个DLL的进程地址空间。在Win32系统中,每个进程拥有自己的32位线性地址空间,如果一个DLL被多个进程调用,每个进程都会收到该DLL的 一份映像。与16位Windows不同,在Win32中DLL可以看作是每个进程自己的代码。

二、动态链接库的优点

1. 共享代码、资源和数据

使用DLL的主要目的就是为了共享代码,DLL的代码可以被所有的Windows应用程序共享。

2. 隐藏实现的细节

DLL中的例程可以被应用程序访问,而应用程序并不知道这些例程的细节。

3. 拓展开发工具如Delphi的功能

由于DLL是与语言无关的,因此可以创建一个DLL,被C++、VB或任何支持动态链接库的语言调用。这样如果一种语言存在不足,就可以通过访问另一种语言创建的DLL来弥补。

没有dumpbin工具的话,去网上下载

在cmd下面,进入dump文件的目录下

1接着,我们输入命令 dumpbin -export dll名。

2还有其他命令,可以参考help,这样就可以了。

3可以用C++自带的工具查。

开始 ——》所有程序 ——》 Microsoift visual C++ 60 ——》Microsoift visual C++ 60 Tools ——》 depends

查具体参数用反汇编,习惯于用OD,ctrl+N 找到要查的参数(后面会有显示是几个参数的),选中那一行按Enter就会跳到那个函数的调用段,里面会有具体的参数类型。

DLL文件:

DLL文件即动态链接库文件,是一种可执行文件,它允许程序共享执行特殊任务所必需的代码和其他资源。Windows提供的DLL文件中包含了允许基于Windows的程序在Windows环境下 *** 作的许多函数和资源。

DLL多数情况下是带有DLL扩展名的文件,但也可能是EXE或其他扩展名。它们向运行于Windows *** 作系统下的程序提供代码、数据或函数。程序可根据DLL文件中的指令打开、启用、查询、禁用和关闭驱动程序。

DLL可在“C:Windows”目录“C:Windows/System”目录和程序的安装目录中找到。如果启动程序,但一个或多个DLL文件丢失或毁坏,则会收到出错消息,如“找不到xyzdll”。如果启动的程序带有一个过期的DLL文件或不匹配的DLL文件,则会出现“未定义的动态链接调用”消息。这时可在其他电脑上找到正确的DLL文件并将它拷贝到适当的目录下,程序就能正确运行。

Dll函数查看器

http://wwwonlinedownnet/soft/17471htm

http://wwwcrackcncn/crackdown/17471/

VC下bin目录有个dumpbinexe,

dumpbin /exports filedll 可以看dll文件的导出符号

C++builder应该也有相应的程序,可能使用参数不一样

另外如果安装了VC的Tools,可以用里面的dependencyexe,功能更强,除了导出符号,还可以查看程序所依赖的DLL,以及DLL间的依赖关系。

但是DLL导出函数的参数类型没办法看到,除非你可以得到编写DLL时的头文件。或者你对反汇编很了解,可以从汇编码和函数名推测出参数类型。劝你还是了解一下COM吧,大多发布的组件都包含类型库信息的,而且一般不会有函数名冲突的问题。现在多数情况下,尤其是大型软件应用中,DLL只不过是组件的载体罢了。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/12182844.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存