天天看点

如何查看DLL的函数声明

如何查看DLL的函数声明 2007-08-28 09:23 转贴自:http://blog.csdn.net/uvbs/archive/2006/01/27/589346.aspx Depends.exe 是 Visual C++ 自带的一个工具。它可能是我们经常使用的工具中最简单的一个工具了,其功能是列出某个应用程序或 DLL 需要的 DLLs。这个程序在本站可以下载(更新版本请到下面这个地址下载:http://www.dependencywalker.com)。如果你需要看某个 DLL 或可执行文件的全路经,可以用它的上下文菜单进行设置。 近期很多兄弟们问怎么样打包程序,如何获取所需dll的信息,这就需要使用VC所带的Depends软件,该软件在VC6安装目录下的tools文件夹里面 D:/Microsoft Visual Studio/Common/Tools,直接 双击执行,然后打开exe文件即可,它主要有下面几个注意事项: 1)所编的软件所需的Dll文件,可以得到相应的Dll路径,版本,属性等。 2)窗口分四部分: 左上角是Dll信息窗口,显示你程序所需的Dll模块, 右边第一个窗口是所选的Dll模块所使用的函数, 右边第二个窗口是所选Dll模块的所有的导出函数, 下面窗口是所有需要的Dll模块的属性 3)右边两个窗口出现四个标签:序号,提示,函数,入口点 如果利用导出是函数,那么出现函数名,如果导出的是序号,那么函数项就是N/A(无法显示) 出现红色提示表示不正常,一般为没有该导出函数 4)该工具得到的是你软件中隐式链接的Dll库,也就是用lib关联的Dll模块, 无法显示显式链接的Dll模块,也就是用LoadLibrary函数导入的Dll函数。(切记切记!) 5)无法提供Borland C++ Builder所提供的Dll文件,无法提供vxd软件的调用 ============================================================================= Q : 如何查看动态库接口函数的参数??? 主要解答者: jyu1221 提交人: ghj1976 感谢: jyu1221 审核者: ghj1976 论坛对应贴子: 查看 A : 使用Microsoft Visual Studio的工具DEPENDS.EXE可以查看动态库的接口函数,但如何能够看到这个动态库接口函数的参数呢? --------------------------------------------------------------- 可以通过反汇编来知道接口函数的参数,建议使用W32DSM来分析,也可以直接使用VC来分析,就是麻烦一点。 现在使用W32DSM来具体说明: 1。先打开需要分析的DLL,然后通过菜单功能-》出口来找到需要分析的函数,双击就可以了。 它可以直接定位到该函数。 2。看准该函数的入口,一般函数是以以下代码作为入口点的。 push ebp mov ebp, esp ... 3。然后往下找到该函数的出口,一般函数出口有以下语句。 ... ret xxxx;//其中xxxx就是函数差数的所有的字节数,为4的倍数,xxxx除以4得到的结果 就是参数的个数。 其中参数存放的地方: ebp+08 //第一个参数 ebp+0C //第二个参数 ebp+10 //第三个参数 ebp+14 //第四个参数 ebp+18 //第五个参数 ebp+1C //第六个参数 。。。。 ------------------------------------------- 还有一种经常看到的调用方式: sub esp,xxxx //开头部分 //函数的内容 。。。 //函数的内容 add esp,xxxx ret //结尾部分 其中xxxx/4的结果也是参数的个数。 ------------------------------------------------- 还有一种调用方式: 有于该函数比较简单,没有参数的压栈过程, 里面的 esp+04就是第一个参数 esp+08就是第二个参数 。。。 esp+xx就是第xx/4个参数 你说看到的xx的最大数除以4后的结果,就是该函数所传递的参数的个数。 ---------------------------------------------- 到现在位置,你应该能很清楚的看到了传递的参数的个数。至于传递的是些什么内容,还需要进一步的分析。 最方便的办法就是先找到是什么软件在调用此函数,然后通过调试的技术,找到该函数被调用的地方。一般都是PUSH指令 来实现参数的传递的。这时可以看一下具体是什么东西被压入堆栈了,一般来说,如果参数是整数,一看就可以知道了, 如果是字符串的话也是比较简单的,只要到那个地址上面去看一下就可以了。 如果传递的结构的话,没有很方便的办法解决,就是读懂该汇编就可以了。对于以上的分析,本人只其到了抛砖引玉, 希望对大家有点用处。 http://topic.csdn.net/t/20030226/15/1468772.html

继续阅读