多实例外部引用如何进行编译链接?

zara zara 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在使用一些没有入档的函数时,比如 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
...全文

相关推荐

评论 10
收藏 已收藏
分享
返回顶部
zara
汇编语言 21,500 成员 41,619 内容