Einzelnen Beitrag anzeigen

Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#4

AW: Anwendung 100%ig garantiert beenden (lassen)?

  Alt 14. Apr 2012, 16:13
Ich habe hier eine Anwendung, die beim Beenden manchmal im Speicher hängen bleibt. Das liegt an einer DLL, die offenbar schlampig programmiert ist.
Sprich: die Anwendung wird garnicht beendet. Vielleicht wird das zugehörige Fenster geschlossen, aber die Anwendung ja offenbar nicht. Denn aufgrund des Speicher- und Prozeßmodells in Windows ist es ein Ding der Unmöglichkeit, daß da etwas zurückbleibt.

Ich habe also diverse Dinge probiert, u.a. schickt die Anwendung einer anderen EXE (=der Wächter) eine Message, die daraufhin mit Killprocess versucht, das Teil zu entfernen. Klappt nicht immer.
Unter welchen Bedingungen klappt es denn? Seit Vista können Anwendungen selber entscheiden ob sie Fensternachrichten von außen annehmen und wenn ja welche.

1. Gibt es eine 'best practice', um mit DLLs umzugehen? z.b. nicht statisch (eh blöd), kontrollierter Shutdown (d.h. die DLL entladen) usw.
"Nicht statisch"? Du könntest die DLL teils ersetzen. Wenn sie nur wenige Funktionen exportiert und es sich um keine wohlbekannte (System-)DLL handelt, ist das trivial. Bekannt sein dürfte dir ja der Begriff "DLL placement attack" - die von mir vorgeschlagene Methode ist eine Variante davon. Man kann sie benutzen um die eigene DLL in den Zielprozeß zu befördern welche dann wiederum die echte DLL lädt und die Funktionen weiterleitet soweit das nötig ist. Für alles andere kann die eigene DLL dann die Kontrolle übernehmen und bspw. MSDN-Library durchsuchenExitProcess aufrufen, womit der Prozeß dann auch das zeitliche segnen würde.

2. Gibt es eine 100% sichere Möglichkeit eine EXE aus dem Speicher zu entfernen?
Nein. Wenn du die Frage so stellst lautet die einzige (aber nicht sinnvolle) Antwort: bei Zimmertemperatur den Rechner mehrere Minuten vom Stromnetz trennen.

Wenn es dir um die EXE als Abbild für den Prozeß geht, dann reicht einfaches Beenden des Prozesses. Schließen des zugehörigen Fensters reicht nicht immer ...

3. Wie schafft Windows es beim Abmelden / Runterfahren, jede EXE aus dem Speicher zu kicken. Welche API-Funktion ist das (außer "Shutdown" )
Erstens gibt es einige APIs die zum Umfeld der Terminal Server API gehören, welche brutalere Geschütze auffahren und zweitens noch die Native API. Beim Shutdown dürfte der Fall aber meines Wissens nach anders liegen. Hier dürfte wohl der Session Manager (smss.exe) das Sagen haben und ohne weiteres in der Lage sein die Prozesse abzuschießen, denn der Session Manager ist es auch der bspw. das Win32-Subsystem startet.

4. Wenn ich die Anwendung in der Delphi-IDE ausführe und sie mal wieder bockig ist, schafft Delphi das mit Strg-F2. Was steckt dahinter?
Der Debugger?!
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat