首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RunDll32是如何工作的?

RunDll32是如何工作的?
EN

Stack Overflow用户
提问于 2011-11-21 13:05:15
回答 2查看 2.6K关注 0票数 8

在不知道函数可以接受的参数数量/类型的情况下,RunDll32究竟是如何调用函数的?

它有没有内置的编译器或类似的东西?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-21 13:21:37

RunDll32非常简单,它调用LoadLibrary来加载给定的DLL,调用GetProcAddress来获取所需函数的函数地址,然后调用该函数。

但是,它不能调用DLL中的任何导出函数-它假定该函数具有以下非常特定的函数签名:

代码语言:javascript
复制
  void CALLBACK
  EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);

其中,CALLBACK是扩展到__stdcall调用约定的宏。有关详细说明,请参阅this knowledge base article

如果您的DLL函数没有正确的签名或调用约定,就会出现许多不好的情况。有关更多血淋淋的细节,请参阅What can go wrong when you mismatch the calling convention?。幸运的(或不幸的),RunDll32 is written in such a way to ameliorate those types of errors,但这仍然不意味着它是一个好主意。请勿使用RunDll32调用没有正确签名的函数。这只是一颗定时炸弹,等待着在下一版本的Windows中爆炸。

票数 14
EN

Stack Overflow用户

发布于 2011-11-21 13:13:45

它不能调用任何函数,它只能调用函数specifically written to be called。因此,没有魔法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8207510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档