Zugriff auf den Speicher anderer C++-Anwendungen
-
14-11-2019 - |
Frage
Ich denke über ein Problem nach, das ich schon seit einiger Zeit habe.Ich möchte ein C/C++-Programm schreiben (zuerst unter Windows), das auf den Speicher (Stapel, Heap, alles) anderer laufender Programme zugreifen (Werte lesen/ändern) kann.(Nicht wie gemeinsam genutzter Speicher, sondern wie jeder Speicher, über den der Computer verfügt.) Ohne die Anwendung von meiner eigenen Anwendung aus starten zu müssen.Ich habe so etwas schon einmal gesehen, aber ich verstehe einfach nicht, wie es gemacht wird.Wenn ich auf den Speicher eines laufenden Programms zugreifen würde, würde ich Fehlermeldungen vom Betriebssystem erhalten, oder?Jede Hilfe ist willkommen!
Lösung
Wie @sharptooth sagte, erfordert dies Unterstützung durch das Betriebssystem.Verschiedene Betriebssysteme machen es anders.Da Sie Windows verwenden, können Sie einige Schritte ausführen:
- Anruf
OpenProcess
, oderCreateProcess
um darauf zuzugreifen oder einen neuen Prozess zu starten.In diesem Anruf müssen Sie eine Anfrage stellenPROCESS_VM_READ
Zugang. - Anruf
ReadProcessMemory
um einen Teil des Speichers in diesem geöffneten Prozess zu lesen.
Wenn Sie den Speicher eines anderen Prozesses ändern möchten, müssen Sie dies tun PROCESS_VM_WRITE
Zugang und Nutzung WriteProcessMemory
um das zu erreichen.
Unter Linux würden Sie beispielsweise ptrace verwenden, um eine Verbindung zu einem Prozess herzustellen und einen Blick in dessen Speicher zu werfen.
Andere Tipps
Sie können einen Prozess (ein anderes Programm) von Ihrer eigenen Anwendung starten und auf einige seiner Informationen zugreifen (insbesondere gemeinsam genutzte Speicher).Das Gegenteil ist sehr schwierig, die CPU fällt auf die Speicheradressen, sodass jeder Prozess der Ansicht ist, dass es den gesamten Speicherplatz hat ...
Sie könnten daran interessiert sein, einen Blick auf die Funktion Toolhelp32ReadProcessMemory
Funktion.