DLL(四)

一 工具Depends

其实不需要用dumpbin我们可能被cd来cd去搞的很不爽了,有没有一个比较简单的工具来看.exe依赖于哪些DLL已经.dll有哪些导出函数可以使用VC提供的D:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin下的Depends.Exe工具,在VS2005下没有安装好像在VC6中有安装,这里直接是一个exe那我们就可以双击之后使用了。

我看看我装的qq播放器依赖于哪些dll,直接拖进来就是了:

是不是看的一清二楚,鸟枪换炮了吧。

看dll有哪些导出文件也是如此:

我想看看qqdownload有哪些导出文件,顺便还能看到这个qqdownload.dll它又依赖于哪些dll

二 通过序号访问导出函数及导出函数的名字改编问题

很多时候我们用到的dll文件不是我们自己做的,而是第三方做的,在这种情况下我们只能请上帝保佑dll的制作者是用def文件,函数的名字是不会被改编的

但是有的时候确实是被改编了,并没有采用好的方法制作的dll被名字改编过了,但是我们还想用,而且没有.h文件提供给我们,怎么办?看下面

我发现QQPlayer.exe所依赖的binkw32.dll中的导出函数就被名字改编了,如下图所示:

 

怎么办这个时候我们如果用dumpbin可能要费点经把dos中的函数名copy到Windows中,但是Depends直接就有这个功能。就像上图做的那样就ok了应该是隐式的调用了剪切板了。

那现在我们就可以调用被名字改编过的函数了。

ADDPROC Add=(ADDPROC)GetProcAddress(hInst,"?add@@YAHHH@Z");

 

如果我们想按照序号来调用则可以如下进行:

注意:是根据Ordinal的序号

ADDPROC Add=(ADDPROC)GetProcAddress(hInst,MAKEINTRESOURCE(1));

 

有关dll安全的知识可以参考http://old.blog.edu.cn/user1/2070/archives/2005/95664.shtml

 

posted on 2009-01-13 19:01  风荷小筑  阅读(412)  评论(0编辑  收藏  举报