Nachdem ich eine Menge Fragen zu ptrace
gestellt habe (die letzten 5 Fragen sind meine :() habe ich endlich die gewünschte Ausgabe bekommen, als ich
mit
%Vor%Der Unterschied in der Manpage ist wie folgt
PTRACE_PEEKTEXT
liest ein Wort am Speicherort addr im Speicher des Kindes PTRACE_PEEKUSER
liest ein Wort bei Offsetadresse im BENUTZERBEREICH des Kindes Ich kann diesen Unterschied nicht allein von der Manpage verstehen. Kann mir jemand dazu mehr beibringen?
PTRACE_PEEKDATA
dient zum Lesen des Daten / Code-Abschnitts des Kindes (Prozess allgemein - der sogenannte Tracee). Wie Sie wissen, verwenden Debugger ptrace
sehr. Sie können diesen Aufruf verwenden, um Werte von Variablen zu untersuchen. Zum Beispiel in GDB/DBX
, wenn Sie
Die Debugger rufen intern ptrace
mit PTRACE_PEEKDATA
auf und finden ihren Wert.
PTRACE_PEEKUSER
wird verwendet, um den Inhalt des USER-Bereichs des Kindes zu lesen, der den Inhalt von Registern und andere Informationen enthält. sys / user.h listet auf, was das andere ist Info.
Zum Beispiel enthält der USER-Bereich
%Vor%Kurz gesagt :
PTRACE_PEEKDATA
steht für Programmdaten (z. B. Variablen) und Code; PTRACE_PEEKUSER
ist für Dinge wie Registerwerte und andere Debug-Informationen; Beachten Sie die Äquivalenz zwischen PTRACE_PEEKDATA
und PTRACE_PEEKTEXT
. Von man ptrace
:
Linux verfügt nicht über separate Text- und Datenadressräume, daher sind diese beiden Anforderungen derzeit äquivalent.
Tags und Links c system-calls ptrace strace