Unterschied zwischen ptrace (PTRACE_PEEKUSER) und ptrace (PTRACE_PEEKDATA)?

10

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

ersetzt habe %Vor%

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?

    
bi0s.kidd0 21.03.2012, 11:40
quelle

1 Antwort

17

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

sagen %Vor%

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.

    
Pavan Manjunath 21.03.2012, 11:54
quelle

Tags und Links