Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ ptrace(2) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

exec(2)

signal(2)

wait(2)

unistd(4)

types(5)

ptrace(2)                                                         ptrace(2)

NAME
     ptrace - Prozeßablauf verfolgen

SYNTAX
     #include <unistd.h>
     #include <sys/types.h>

     long ptrace(int request, pidt pid, long addr, long data);

BESCHREIBUNG
     Mit ptrace() kann ein Vaterprozeß die Ausführung eines Sohnprozesses
     steuern. Das Kommando wird hauptsächlich zur Fehlersuche mit Hilfe von
     Haltepunkten verwendet. Normalerweise läuft der Sohnprozeß wunschgemäß
     ab, bis ein Signal eintritt [siehe Liste in signal(5)], bei dem er
     einen Stopp-Zustand erreicht, woraufhin der Vaterprozeß über wait(2)
     entsprechend benachrichtigt wird. Befindet sich der Sohnprozeß im
     Stopp-Zustand, kann der Vaterprozeß den "Speicherabzug" mit ptrace()
     prüfen und ändern. Auch kann der Vaterprozeß veranlassen, daß der
     Sohnprozeß die Ausführung entweder beendet oder weiter ausführt, wobei
     die Möglichkeit gegeben ist, das Signal, welches das Stoppen verur-
     sacht, zu ignorieren.

     Mit dem Argument request wird die ptrace()-Aktion festgelegt. request
     kann folgende Werte haben:

     0    Der Sohnprozeß fordert, daß sein Ablauf vom Vaterprozeß verfolgt
          werden soll. Die Ablaufverfolgungsoption des Sohnprozesses wird
          eingeschaltet, welche bestimmt, daß der Sohnprozeß bei Empfang
          des Signals in einem Stopp-Zustand und nicht in dem mit disp
          angegebenen Zustand gelassen wird [siehe signal(2)]. Die Argu-
          mente pid, addr, und data werden ignoriert, und ein Rückgabewert
          für diese Anforderung ist nicht definiert. Wenn der Vaterprozeß
          keine Ablaufverfolgung des Sohnprozesses durchführt, entstehen
          eigenartige Resultate.

     Alle weiteren Anforderungen können nur vom Vaterprozeß eingesetzt wer-
     den. Für beide ist pid die Prozeßnummer des Sohnprozesses. Der Sohn-
     prozeß muß sich in einem Stopp- Zustand befinden, bevor diese Anforde-
     rungen gestellt werden können.

     1, 2 Das Wort an der Stelle addr im Adreßraum des Sohnprozesses wird
          an den Vaterprozeß zurückgegeben. Sind Anweisungs- und Datenbe-
          reich voneinander getrennt, gibt Anforderung 1 ein Wort aus dem
          Anweisungsbereich und Anforderung 2 aus dem Datenbereich zurück.
          Sind die Anweisungs- und Datenbereiche nicht voneinander
          getrennt, führen die Anforderungen 1 und 2 zum gleichen Ergebnis.
          Das Argument data wird ignoriert. Diese beiden Anforderungen
          bleiben erfolglos, wenn addr nicht die Anfangsadresse eines Worts
          ist. In diesem Fall wird ein Wert von -1 an den Vaterprozeß
          zurückgegeben, und errno des Vaterprozesses wird auf EIO gesetzt.





Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

ptrace(2)                                                         ptrace(2)

     3    Das Wort an der Stelle addr im Benutzerbereich des Sohnes im
          System-Prozeßverwaltungsbereich (siehe sys/user.h) wird an den
          Vaterprozeß zurückgegeben. Das Argument data wird ignoriert.
          Diese Anforderung ist erfolglos, wenn addr nicht die Anfangs-
          adresse eines Worts ist oder außerhalb des Benutzerbereichs
          liegt. In diesem Fall wird ein Wert von -1 an den Vaterprozeß
          zurückgegeben, und errno des Vaterprozesses wird auf EIO gesetzt.

     4, 5 Der für das Argument data gegebene Wert wird in den Adreßraum des
          Sohnprozesses an die Stelle addr geschrieben. Wenn Anweisungs-
          und Datenbereich voneinander getrennt sind, schreibt die Anforde-
          rung 4 ein Wort in den Anweisungsbereich und die Anforderung 5
          ein Wort in den Datenbereich. Sind die Anweisungs- und Datenbe-
          reiche nicht voneinander getrennt, führen die Anforderungen 4 und
          5 zu dem gleichen Ergebnis. Nach erfolgreicher Beendigung wird
          der in den Adreßraum des Sohnprozesses geschriebene Wert an den
          Vaterprozeß zurückgegeben. Diese beiden Anforderungen sind erfol-
          glos, wenn addr nicht die Anfangsadresse eines Worts war. In die-
          sem Fall wird ein Wert von -1 an den Vaterprozeß zurückgegeben,
          und errno des Vaterprozesses wird auf EIO gesetzt.

     6    Mit dieser Anforderung können einige Einträge in den Benutzerbe-
          reich des Sohnprozesses geschrieben werden. data liefert den
          Wert, der geschrieben werden soll, und addr ist die Stelle für
          den Eintrag. Die Einträge können Register und Bedingungscodes vom
          Statuswort des Prozessors sein.

     7    Der Sohnprozeß nimmt die Ausführung wieder auf. Wenn das Argument
          data 0 ist, werden alle anstehenden Signale einschließlich des
          Signals, das den Stopp des Sohnprozesses verursacht hat, vor der
          Wiederaufnahme der Ausführung aufgehoben. Wenn das Argument data
          eine gültige Signalnummer ist, nimmt der Sohnprozeß die Ausfüh-
          rung wieder auf, als ob er dieses Signal angetroffen hätte, und
          alle anderen anstehenden Signale werden aufgehoben. Das Argument
          addr muß für diese Anforderung gleich 1 sein. Nach erfolgreicher
          Beendigung wird der Wert von data wieder an den Vaterprozeß
          zurückgegeben. Diese Anforderung ist erfolglos, wenn data nicht 0
          oder keine gültige Signalnummer ist. In diesem Fall wird ein Wert
          von -1 an den Vaterprozeß zurückgegeben, und errno des Vaterpro-
          zesses wird auf EIO gesetzt.

     8    Der Sohnprozeß wird mit den gleichen Folgen beendet wie exit(2).

     9    Das Ablauf-Verfolgungsbit im Prozessor-Statuswort des Sohnprozes-
          ses wird gesetzt und führt dann dieselben Schritte aus wie oben
          für Anforderung 7 aufgelistet. Das Ablauf-Verfolgungsbit bewirkt
          eine Unterbrechung nach Ausführung einer Maschinenanweisung. Dies
          ermöglicht Einzelschritt-Ablaufverfolgungen des Sohnes.






Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

ptrace(2)                                                         ptrace(2)

     Zur Verhinderung unbefugter Eingriffe sperrt ptrace() das Setzen des
     s-Bits bei den nachfolgenden exec(2)-Aufrufen. Wenn ein ablaufverfolg-
     ter Prozeß exec(2) aufruft, stoppt der Prozeß vor Ausführung der
     ersten Anweisung des neuen Programms mit der Anzeige von Signal
     SIGTRAP. ptrace() ist im allgemeinen erfolglos, wenn einer oder meh-
     rere der nachstehenden Punkte zutreffen:

     EIO       request ist eine unzulässige Nummer.

     ESRCH     pid kennzeichnet einen Sohnprozeß, der nicht vorhanden oder
               kein ptrace() mit der Anforderung 0 ist.

     EPERM     Das aufrufende Programm hat nicht die notwendigen MAC-Privi-
               legien.

SIEHE AUCH
     exec(2), signal(2), wait(2), unistd(4), types(5).





































Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026