Cna*_*eak 4 c dll winapi rundll32
我有一个导出函数的DLL:
__declspec(dllexport)
void __stdcall MyEntryPoint(char* params)
{
MessageBoxA("MyEntryPoint",params,0,0);
}
Run Code Online (Sandbox Code Playgroud)
如何使用rundll32.exe加载我的DLL并调用MyEntryPoint()?
您需要定义一个具有非常特定签名的函数,以便rundll32可以调用它.请查看此博客条目以获取相关信息,其中包含有关崩溃的方式和原因的详细信息.
另外,请看一下类似问题的答案,其中详细介绍了函数的签名.
基本上,您的函数可以安全地调用,它需要定义为:
void CALLBACK MyEntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR pszCmdLine, int nCmdShow);
Run Code Online (Sandbox Code Playgroud)
要么
void CALLBACK MyEntryPointW(HWND hwnd, HINSTANCE hinst, LPWSTR pszCmdLine, int nCmdShow);
Run Code Online (Sandbox Code Playgroud)
任何其他东西都会破坏堆栈并且可能(或可能不会)导致崩溃.我认为在Windows的更高版本中,rundll将首先查找该MyEntryPointW函数,如果发现调用该函数,则区别在于Unicode pszCmdLine参数.
有关如何使用的更多信息rundll32,请查看MSDN,其中详细说明了对每个参数的期望等.