7
A
回答
11
RunDll32几乎是一个很薄的包装器,它调用LoadLibrary
加载给定的DLL,调用GetProcAddress
来获取所需函数的函数地址,然后调用该函数。
它不能调用任何只导出函数的DLL,但是,它假定函数具有以下非常具体的函数签名:
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中启动。
2
它不能调用任何函数,它只能调用函数specifically written to be called。因此,没有魔法。
相关问题
- 1. 如何使用Rundll32来切换鼠标?
- 2. 使用CreateProcess执行rundll32.exe
- 3. 从Rundll32调用SetCursorPos函数?
- 4. 什么锋利的(#)指RUNDLL32.EXE参数
- 5. “rundll32 url.dll,FileProtocolHandler”的URL长度限制?
- 6. 从命令promp使用msdelta.dll和rundll32?
- 7. 如何工作?
- 8. 如何:(){:| :& } ;:工作
- 9. hgearman工人如何工作?
- 10. set_error_handler不工作我想如何工作
- 11. mpegts如何工作
- 12. AJAX如何工作?
- 13. printf如何工作?
- 14. ArrayAdapter.getView()如何工作?
- 15. jdbc如何工作
- 16. match_parent如何工作?
- 17. DisplacementMapFilter如何工作?
- 18. servlet如何工作?
- 19. sendmsg如何工作?
- 20. TabLayout如何工作?
- 21. paintComponent如何工作?
- 22. WorkItem.Save()如何工作?
- 23. gp_camera_file_get如何工作?
- 24. ACE_Remote_Mutex如何工作?
- 25. Class.forName()如何工作?
- 26. ZipInputStream.getNextEntry()如何工作?
- 27. editData如何工作?
- 28. selectorgadget如何工作?
- 29. CommandManager.RequerySuggested如何工作?
- 30. GetSchemaTable()如何工作?
User32.dll中的SwapMouseButton是一个函数的例子,其中涉及“magic”。这种神奇的解释里面的答案:http://stackoverflow.com/a/30285986/832220 –
我刚刚发现PowrProf.dll里面的SetSuspendState作为这种魔术的另一个例子。只需尝试以下命令来演示这种魔术:rundll32.exe PowrProf.dll,SetSuspendState –
UserWork.dll中的LockWorkStation是Rundll32.exe可调用函数的另一个示例。命令行是:rundll32.exe User32.dll,LockWorkStation –