2016-04-11 6 views
-2

Ich versuche derzeit, eine DLL in ein Projekt zu injizieren, aber jedes Mal wenn ich eine while-Schleife verwende, stürzt der Prozess ab. Dies ist der Code:Injected DLL Hauptschleife stürzt den Prozess

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

Versuchen Sie DLL-Injektion durchzuführen? –

+0

"Ich versuche gerade, eine DLL in ein Projekt zu injizieren" Ich habe erfolgreich die DLL in den Prozess injiziert, ich habe versucht, mit einem Meldungsfeld auf Dllmain zu testen, und es zeigte sich, aber jedes Mal versuche ich eine While-Schleife zu verwenden es stürzt ab. –

+0

Verwenden Sie Umwege oder wird manuell und in den Prozessbereich injiziert? Hast du sichergestellt, dass deine Seite ausführbar ist? –

Antwort

2

Da Sie Ihre ursprüngliche Frage geändert, werde ich meine Antwort ein wenig neu ordnen ...

Es gibt erhebliche Grenzen gesetzt, was Sie in einem DLL-Einstiegspunkt sicher tun können .

Bitte lesen Sie sorgfältig die Remaks auf der folgenden Seite: https://msdn.microsoft.com/en-us/library/windows/desktop/ms682583(v=vs.85).aspx und https://msdn.microsoft.com/en-us/library/windows/desktop/aa370448(v=vs.85).aspx

Zum Beispiel sollte es nicht mehr als 300 ms (empfohlene Zeit) nehmen während der DLL_PROCESS_ATTACH. Du gibst auch nichts zurück (sollte ein boolescher Wert sein).

Ich denke jedoch, der Hauptgrund, dass Ihre Software hängt, ist, weil MessageBox und/oder getch() wahrscheinlich dort ein Deadlock erstellt. OutputDebugString In Bezug auf die MessageBox Verwendung stattdessen beziehen sich auf diese Antwort: https://stackoverflow.com/a/10981735/5874704

Auch als in den Kommentaren vorgeschlagen:

nicht die while-Schleife in DllMain setzen Sie. Verwenden Sie CreateThread in DllMain, um einen neuen Thread zu starten. Setzen Sie die While-Schleife dort

Zuvor haben Sie auch nach der Definition des DLLMain gefragt. Dies ist die "bare" -Funktion der 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

kann immer noch nicht die While-Schleife zu arbeiten, stürzt den Prozess ab, wenn es injiziert wird. –

+0

Legen Sie die While-Schleife nicht in DllMain. Verwenden Sie CreateThread in DllMain, um einen neuen Thread zu starten. Lege die While-Schleife dort hin. –

+0

@HarryJohnston danke. –

Verwandte Themen