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!

War es hilfreich?

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:

  1. Anruf OpenProcess, oder CreateProcess um darauf zuzugreifen oder einen neuen Prozess zu starten.In diesem Anruf müssen Sie eine Anfrage stellen PROCESS_VM_READ Zugang.
  2. 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top