使用rundll32.exe執行dll函式

anda0109發表於2014-10-15

我們知道windows下dll是沒辦法獨立執行的,但是微軟提供了rundll32.exe用於執行dll。

先測試一下:執行“Rundll32.exe shell32.dll,RestartDialog”,會彈出重啟對話方塊。同樣這種方式可以開啟windows系統其他功能。

下面看一下如何定義自己的dll讓rundll32.exe執行。

微軟給出的dll函式原型如下:

  void CALLBACK
  EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);

   hwnd - window handle that should be used as the owner window for
          any windows your DLL creates
   hinst - your DLL's instance handle
   lpszCmdLine - ASCIIZ command line your DLL should parse
   nCmdShow - describes how your DLL's windows should be displayed

自定義的測試dll如下:

extern "C" _declspec(dllexport) void __cdecl rundll32dllfun(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, 

int nCmdShow)
{
MessageBox(NULL,"TEST",lpszCmdLine,MB_OK);
return;
}

生成動態庫rundll32dll.dll。

執行:

rundll32.exe "E:\demo\rudll32dll\Release\rudll32dll.dll",rundll32dllfun      

彈出了熟悉的對話方塊,說明呼叫成功。

同時可以傳入引數,執行:

rundll32.exe "E:\demo\rudll32dll\Release\rudll32dll.dll",rundll32dllfun  888   

彈出了對話方塊,並且888顯示了對話方塊上面,說明引數也可以傳遞了,其中引數在lpszCmdLine中獲取。

執行命令說明:rundll32.exe "xxx.dll",dllfun parameter

這樣我們就可以開發dll作為應用程式來執行了,在程式中只能看到rundll32.exe,需通過程式檢視工具檢視執行了哪個dll。


rundll32.exe在那裡4位系統中的位置說明:

windows/system32/rundll32.exe對應呼叫64位dll

windows/SysWoW64/rundll32.exe對應呼叫32位dll

微軟給出的參考文章如下:http://support2.microsoft.com/kb/164787

相關文章