Programm "pausieren"?
-
Bezieht sich das eigentlich auf den Datenspeicher der Anwendung oder auch auf den Codespeicher (also den Speicherbereich der Daten enthält oder auch den der den Code der Anwendung enthält)?
Aber wieso sollte man sowas schreiben (ausser für Viren/Trojaner)? Man weis doch sowieso nicht in welchem Format die Daten vorliegen. Zum Beispiel der notepad könnte die Textdaten in reinem ASCI im Speicher haben, in Binären-Format oder komprimiert. Auch ist unbekannt wann welche Daten anfangen.
Wenn es sich um eigene Anwendungen handelt, dann gibt es weitaus bessere Wege zur Kommunikation / Datenaustausch.
Deswegen habe ich auch nocht nie auch nur daran gedacht, im Speicher einer anderen Anwendung lesen/schreiben zu wollen.
-
Sehe ich 100% genauso! Außerdem kann man wohl kaum garantieren, dass z.B. die notepad.exe auf den meisten (Windows-) Systemen exakt gleich aufgebaut ist. Möglich wärs sogar, dass die durch ein Windows-Update geändert wird. Jedenfalls bei anderen Programmen können sich die Exe-Dateien schnell durch Patches ändern
Und wenn ich die Zeile HWND hwar3 = ... sehe, frag ich mich, ob Listing vielleicht WarCraft3 verändern will??
Wurde schon mehrfach gesagt, aber das ist echt mehr als schmutzig und dreckig.
-
Pfu, keine Ahnung wer sowas einsetzt ausser für Viren/Debugging/Cracks etc. Zum cracken ist es aber sicher gut geeignet, da man dann ja das entsprechende Programm nicht auf der Platte patchen muss sondern bloss im Speicher.
Und ob man mit WriteProcessMemory gerade auf Code-Seiten schreiben kann weiss ich nicht, denke aber schon, bloss dass die halt u.U. schreibgeschützt sind, aber dafür gibts dann ja wieder VirtualProtect(Ex).
An ein Programm welches sowas in der Art macht erinnere ich mich jetzt: Style XP. Das patcht in memory eine DLL um den Signatur check für die visual styles von XP auszuhebeln, damit man andere visual styles verwenden kann als die 3 von MS mitgelieferten. Ob das jetzt "böse" und "schmutzig" ist sei dahingestellt, es funktioniert auf jeden Fall

Und eine eigene DLL in jeden Prozess reinladen zu lassen (in der Registry gibts irgendwo so nen schönen Key wo man das eintragen kann) halte ich auch nicht für wesentlich sauberer.
----
Ich will auch garnicht behaupten ich hätte das selbst schonmal irgendwo gebraucht/verwendet, ich weiss bloss dass es die entsprechenden Funktionen gibt.