2016-04-11 12 views
-2

現在、プロジェクトにDLLを注入しようとしていますが、whileループを使用するたびにプロセスがクラッシュします。 これはコードです:注入されたDLLメインループでプロセスがクラッシュする

BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call,LPVOID lpReserved){ 
    switch(ul_reason_for_call){ 
    case DLL_PROCESS_ATTACH: 
     while(char c = getch()){ 
      if(c == 'p'){ 
       MessageBox(0,L"CAPT",L"CAPT",MB_OK); 
      } 
     } 
     break; 
    } 
return TRUE; 
} 
+0

DLL注入を実行しようとしていますか? –

+0

"私は現在、プロジェクトにDLLを注入しようとしています。" dllをプロセスに挿入すると、dllmainのメッセージボックスでテストしようとしましたが、表示されますが、whileループを使用しようとするたびにクラッシュします。 –

+0

Detoursを使用していますか、手動で割り当ててプロセススペースに注入していますか?あなたのページが実行可能であることを確認しましたか? –

答えて

2

あなたの元の質問を変更したので、私は私の答えビットを並べ替えるよ...あなたは安全にDLLエントリポイントで何ができるかに大きな制限が

あります。

次ページのremaksてよくお読みください:たとえば https://msdn.microsoft.com/en-us/library/windows/desktop/ms682583(v=vs.85).aspxhttps://msdn.microsoft.com/en-us/library/windows/desktop/aa370448(v=vs.85).aspx

、それはDLL_PROCESS_ATTACH中に(時間を推奨)300msのより多くを取るべきではありません。あなたは何も返さない(ブール値でなければならない)。

しかし、あなたのソフトウェアがハングする主な理由は、MessageBoxおよび/またはgetch()がおそらくデッドロックを作成しているからです。 MessageBox使用OutputDebugStringに関して代わりに、この回答を参照してください:https://stackoverflow.com/a/10981735/5874704

また、コメントで提案されているように:

することにDllMainでwhileループを入れないでください。 DllMainでCreateThreadを使用して新しいスレッドを起動します。 whileループをそこに置く

以前はDLLMainの定義についても質問しました。これは、DllMainの「裸の」関数です。

BOOL WINAPI DllMain( 
    HINSTANCE hDllHandle, 
    DWORD  nReason, 
    LPVOID Reserved) 
{ 
    BOOL bSuccess = TRUE; 
    switch (nReason) 
    { 
     case DLL_PROCESS_ATTACH: 
      break; 
     case DLL_PROCESS_DETACH: 
     break; 
     case DLL_THREAD_ATTACH: 
     break; 
     case DLL_THREAD_DETACH: 
     break; 
    } 

    return bSuccess; 

} 
+0

はまだwhileループを動作させることができず、注入されたときにプロセスをクラッシュさせます。 –

+0

whileループをDllMainに入れないでください。 DllMainでCreateThreadを使用して新しいスレッドを起動します。 whileループをそこに置きます。 –

+0

@HarryJohnstonありがとうございます。 –

関連する問題