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 URLDownloadToFile
- 2. rundll32.exe不能在Windows 2003服務器上工作
- 3. 如何使用Rundll32來切換鼠標?
- 4. 從Rundll32調用SetCursorPos函數?
- 5. 使用CreateProcess執行rundll32.exe
- 6. 在rundll32.exe窗口中注入文本
- 7. 「rundll32 url.dll,FileProtocolHandler」的URL長度限制?
- 8. 什麼鋒利的(#)指RUNDLL32.EXE參數
- 9. 從命令promp使用msdelta.dll和rundll32?
- 10. Ajax如果不工作。如何工作?
- 11. 如何工作
- 12. `===`如何工作?
- 13. 如何工作?
- 14. 如何工作?
- 15. 如何:(){:| :& } ;:工作
- 16. hgearman工人如何工作?
- 17. 如何在工作中安排工作
- 18. 工作目錄是如何工作的?
- 19. 如何工作正在工作
- 20. set_error_handler不工作我想如何工作
- 21. Haskell的工作方式如何工作:
- 22. Linux工作隊列如何工作?
- 23. Netty - 工作線程如何工作
- 24. WebDriver操作如何工作
- 25. 如何工作作曲家?
- 26. Collections.binarySearch如何工作?
- 27. Range如何工作?
- 28. searchvim如何工作?
- 29. sendmsg如何工作?
- 30. SQLTransaction.Commit()如何工作?
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 –