在使用一些没有入档的函数时,比如 RegisterShellHookWindow() 这样的 user32.dll 中的函数,一般提供的 inc 和 lib 文件中并没有定义它。使用 LoadLibrary()/GetProcAddress() 的话,又比较麻烦。自己创建 inc/lib 文件,在使用 Masm32v7 和 vc6 的链接程序时,生成的最后的可执行程序,只有一个对 user32.dll 的引用是完整的,其它的模块名部分是空白。具体表现就是在 Exescope 这样的资源软件里,在 IMPORT 节只能看到一个对 user32.dll 的引用;用 Ollydbg 载入程序的话,另外的对 user32.dll 中函数的引用,只有函数名,没有 user32.dll 模块名,所以实际上对引用地址的修正也就没能完成。无疑,这样的程序是不能使用的。
我看到其实有不少的程序中对同以模块的多实例引用。比如手头的 Foxmail4 的主程序 Foxmail.exe,对 kernel32.dll 有 3 组引用;对 advapi32.dll 和 oleaut32.dll 及 user32.dll 都有 2 例引用。
所以有些不明白这样多例引用是如何创建的,编译/链接程序有特殊选项吗?
谢谢!
下面这个资源链接就是 Foxmail 的 IMPORT 节的截图
http://download.csdn.net/source/1987586