Hallo Mitübersetzer, und angehängt Teil 4 mit der Bitte um konstruktive Kritik. Vielen Dank & Grüße Helge -- Dr. Helge Kreutzmann debian@helgefjell.de Dipl.-Phys. http://www.helgefjell.de/debian.php 64bit GNU powered gpg signed mail preferred Help keep free software "libre": http://www.ffii.de/
#. type: SS #, no-wrap msgid "Signal injection and suppression" msgstr "Signaleinspeisung und -unterdrückung" #. type: Plain text msgid "" "After signal-delivery-stop is observed by the tracer, the tracer should " "restart the tracee with the call" msgstr "" "Nachdem der Signallieferstopp durch den Verfolger beobachtet wurde, sollte " "der Verfolger den verfolgten Prozess mit dem Aufruf" #. type: Plain text #, no-wrap msgid " ptrace(PTRACE_restart, pid, 0, sig)\n" msgstr " ptrace(PTRACE_restart, PID, 0, Signal)\n" #. type: Plain text msgid "" "where B<PTRACE_restart> is one of the restarting ptrace requests. If I<sig> " "is 0, then a signal is not delivered. Otherwise, the signal I<sig> is " "delivered. This operation is called I<signal injection> in this manual " "page, to distinguish it from signal-delivery-stop." msgstr "" "neu starten, wobei B<PTRACE_restart> einer der neu startenden Ptrace-" "Anfragen ist. Falls I<Signal> 0 ist, wird das Signal nicht zugestellt. " "Andernfalls wird das Signal I<Signal> zugestellt. Diese Aktion wird in " "dieser Handbuchseite I<Signaleinspeisung> genannt, um sie vom " "Signallieferstopp zu unterscheiden." #. type: Plain text msgid "" "The I<sig> value may be different from the I<WSTOPSIG(status)> value: the " "tracer can cause a different signal to be injected." msgstr "" "Der I<Signal>wert kann sich vom Wert I<WSTOPSIG(status)> unterschieden: Der " "Verfolger kann veranlassen, dass ein anderes Signal eingespeist wird." #. type: Plain text msgid "" "Note that a suppressed signal still causes system calls to return " "prematurely. In this case, system calls will be restarted: the tracer will " "observe the tracee to reexecute the interrupted system call (or " "B<restart_syscall>(2) system call for a few system calls which use a " "different mechanism for restarting) if the tracer uses B<PTRACE_SYSCALL>. " "Even system calls (such as B<poll>(2)) which are not restartable after " "signal are restarted after signal is suppressed; however, kernel bugs exist " "which cause some system calls to fail with B<EINTR> even though no " "observable signal is injected to the tracee." msgstr "" "Beachten Sie, dass ein unterdrücktes Signal immer noch Systemaufrufe " "verursacht, um vorzeitig zurückzukehren. In diesem Fall werden Systemaufrufe " "neu gestartet: Der Verfolger wird den verfolgten Prozess beobachten, um den " "unterbrochenen Systemaufruf neu auszuführen (oder den Systemaufruf " "B<restart_syscall>(2) für wenige Systemaufrufe, die unterschiedliche " "Mechanismen zum erneuten Starten verwenden), falls der Verfolger " "B<PTRACE_SYSCALL> benutzt. Sogar Systemaufrufe (wie B<poll>(2)), die nach " "einem Signal nicht mehr neu startbar sind, werden nach dem Unterdrücken des " "Signals neu gestartet werden. Es existieren jedoch einige Kernelfehler, die " "zum Fehlschlagen einiger Systemaufrufe mit B<EINTR> führen, sogar, wenn kein " "beobachtbares Signal in den verfolgten Prozess eingespeist wurde." #. type: Plain text msgid "" "Restarting ptrace commands issued in ptrace-stops other than signal-delivery-" "stop are not guaranteed to inject a signal, even if I<sig> is nonzero. No " "error is reported; a nonzero I<sig> may simply be ignored. Ptrace users " "should not try to \"create a new signal\" this way: use B<tgkill>(2) " "instead." msgstr "" "Es wird nicht garantiert, dass beim Neustarten von Ptrace-Befehlen, die in " "anderen Ptrace-Stopps als Signallieferstopps angestoßen wurden,ein Signal " "eingespeist wird, nicht einmal, wenn I<Signal> nicht Null ist. Es wird kein " "Fehler gemeldet; ein I<Signal> ungleich Null könnte einfach ignoriert " "werden. Ptrace-Benutzer sollten nicht versuchen, auf diese Art »ein neues " "Signal zu erzeugen«: Benutzen Sie stattdessen B<tgkill>(2)." #. type: Plain text msgid "" "The fact that signal injection requests may be ignored when restarting the " "tracee after ptrace stops that are not signal-delivery-stops is a cause of " "confusion among ptrace users. One typical scenario is that the tracer " "observes group-stop, mistakes it for signal-delivery-stop, restarts the " "tracee with" msgstr "" "Die Tatsache, dass Signaleinspeisungsanfragen beim erneuten Starten des " "verfolgten Prozesses nach Ptrace-Stopps, die keine Signallieferstopps sind, " "ignoriert werden können, ist ein Grund für Verwirrung bei Ptrace-Benutzern. " "Ein typisches Szenario ist, dass der Verfolger Gruppenstopps beobachtet, sie " "fälschlicherweise für Signallieferstopps hält und den verfolgen Prozess mit" #. type: Plain text #, no-wrap msgid " ptrace(PTRACE_restart, pid, 0, stopsig)\n" msgstr " ptrace(PTRACE_restart, PID, 0, Stoppsignal)\n" #. type: Plain text msgid "" "with the intention of injecting I<stopsig>, but I<stopsig> gets ignored and " "the tracee continues to run." msgstr "" "neu startet mit der Absicht I<Stoppsignal> einzuspeisen, I<Stoppsignal> aber " "ignoriert wird und der verfolgte Prozess weiter läuft." #. type: Plain text msgid "" "The B<SIGCONT> signal has a side effect of waking up (all threads of) a " "group-stopped process. This side effect happens before signal-delivery-" "stop. The tracer can't suppress this side effect (it can only suppress " "signal injection, which only causes the B<SIGCONT> handler to not be " "executed in the tracee, if such a handler is installed). In fact, waking up " "from group-stop may be followed by signal-delivery-stop for signal(s) " "I<other than> B<SIGCONT>, if they were pending when B<SIGCONT> was " "delivered. In other words, B<SIGCONT> may be not the first signal observed " "by the tracee after it was sent." msgstr "" "Das Signal B<SIGCONT> hat einen Seiteneffekt, dass es einen Prozess im " "Gruppenstopp (alle Threads davon) aufweckt. Dieser Seiteneffekt tritt vor " "dem Signallieferstopp auf. Der Verfolger kann diesen Seiteneffekt nicht " "unterdrücken (er kann nur Signaleinspeisung unterdrücken, was nur dazu " "führt, dass die B<SIGCONT>-Handhabung nicht im verfolgten Prozess ausgeführt " "wird, falls eine solche Handhabung installiert ist). Tatsächlich könnte dem " "Aufwecken aus den Gruppenstopp ein Signallieferstopp für I<andere> Signale " "als B<SIGCONT> folgen, falls sie ausstehen, wenn B<SIGCONT> gesandt wurde. " "In anderen Worten könnte es sein, dass B<SIGCONT> nicht das erste durch den " "Verfolger beobachtete Signal ist, nachdem es gesandt wurde." #. type: Plain text msgid "" "Stopping signals cause (all threads of) a process to enter group-stop. This " "side effect happens after signal injection, and therefore can be suppressed " "by the tracer." msgstr "" "Stoppen von Signalen führt dazu, das ein Prozess (alle Threads davon) in " "einen Gruppenstopp eintreten. Dieser Seiteneffekt tritt nach der " "Signaleinspeisung auf und kann daher durch den Verfolger unterdrückt werden." # #. In the Linux 2.4 sources, in arch/i386/kernel/signal.c::do_signal(), #. there is: #. /* The debugger continued. Ignore SIGSTOP. */ #. if (signr == SIGSTOP) #. continue; #. type: Plain text msgid "In Linux 2.4 and earlier, the B<SIGSTOP> signal can't be injected." msgstr "" "In Linux 2.4 und älter kann das Signal B<SIGSTOP> nicht eingespeist werden." #. type: Plain text msgid "" "B<PTRACE_GETSIGINFO> can be used to retrieve a I<siginfo_t> structure which " "corresponds to the delivered signal. B<PTRACE_SETSIGINFO> may be used to " "modify it. If B<PTRACE_SETSIGINFO> has been used to alter I<siginfo_t>, the " "I<si_signo> field and the I<sig> parameter in the restarting command must " "match, otherwise the result is undefined." msgstr "" "B<PTRACE_GETSIGINFO> kann benutzt werden, um eine I<siginfo_t>-Struktur zu " "erhalten, die dem gesandten Signal entspricht. B<PTRACE_SETSIGINFO> kann " "benutzt werden, um es zu verändern. Falls B<PTRACE_SETSIGINFO> benutzt " "wurde, um I<siginfo_t> zu verändern, müssen das Feld I<si_signo> und der " "Parameter I<Signal> im Befehl zum Neustart übereinstimmen, andernfalls ist " "das Ergebnis undefiniert." #. type: SS #, no-wrap msgid "Group-stop" msgstr "Gruppenstopp" #. type: Plain text msgid "" "When a (possibly multithreaded) process receives a stopping signal, all " "threads stop. If some threads are traced, they enter a group-stop. Note " "that the stopping signal will first cause signal-delivery-stop (on one " "tracee only), and only after it is injected by the tracer (or after it was " "dispatched to a thread which isn't traced), will group-stop be initiated on " "I<all> tracees within the multithreaded process. As usual, every tracee " "reports its group-stop separately to the corresponding tracer." msgstr "" "Wenn ein Prozess (der möglicherweise aus mehreren Threads besteht) ein " "Stoppsignal empfängt, werden alle Threads gestoppt. Falls einige Threads " "verfolgt werden, treten sie in eine Thread-Gruppe ein. Beachten Sie, dass " "das Stoppsignal zuerst einen Signallieferstopp verursachen wird (nur auf den " "verfolgten Prozess) und nur, nachdem es durch den Verfolger eingespeist " "wurde (oder nachdem es an einen Thread geschickt wurde, der nicht verfolgt " "wird), wird der Gruppenstopp auf I<alle> verfolgten Prozesse innerhalb eines " "Prozesses aus mehreren Threads eingeleitet. Wie üblich meldet jeder " "verfolgte Prozess seinen Gruppenstopp separat an den entsprechenden " "Verfolger." #. type: Plain text msgid "" "Group-stop is observed by the tracer as B<waitpid>(2) returning with " "I<WIFSTOPPED(status)> true, with the stopping signal available via " "I<WSTOPSIG(status)>. The same result is returned by some other classes of " "ptrace-stops, therefore the recommended practice is to perform the call" msgstr "" "Der Gruppenstopp wird vom Verfolger als B<waitpid>(2) beobachtet und kehrt " "mit »I<WIFSTOPPED(status)> true« mit dem Stoppsignal zurück, das über " "I<WSTOPSIG(status)> verfügbar ist. Dasselbe Ergebnis wird von einigen " "anderen Klassen von Ptrace-Stopps zurückgegeben, daher ist die empfohlene " "Vorgehensweise, folgenden Aufruf zu tätigen:" #. type: Plain text #, no-wrap msgid " ptrace(PTRACE_GETSIGINFO, pid, 0, &siginfo)\n" msgstr " ptrace(PTRACE_GETSIGINFO, PID, 0, &siginfo)\n" #. type: Plain text msgid "" "The call can be avoided if the signal is not B<SIGSTOP>, B<SIGTSTP>, " "B<SIGTTIN>, or B<SIGTTOU>; only these four signals are stopping signals. If " "the tracer sees something else, it can't be a group-stop. Otherwise, the " "tracer needs to call B<PTRACE_GETSIGINFO>. If B<PTRACE_GETSIGINFO> fails " "with B<EINVAL>, then it is definitely a group-stop. (Other failure codes " "are possible, such as B<ESRCH> (\"no such process\") if a B<SIGKILL> killed " "the tracee.)" msgstr "" "Der Aufruf kann vermieden werden, falls das Signal nicht B<SIGSTOP>, " "B<SIGTSTP>, B<SIGTTIN> oder B<SIGTTOU> ist. Nur diese vier Signale sind " "Stoppsignale. Falls der Verfolger etwas anderes sieht, kann es kein " "Gruppenstopp sein. Andernfalls benötigt der Verfolger den Aufruf " "B<PTRACE_GETSIGINFO>. Falls B<PTRACE_GETSIGINFO> mit B<EINVAL> fehlschlägt, " "ist es definitiv ein Gruppenstopp. (Andere Fehlerkodes wie B<ESRCH> (»kein " "derartiger Prozess«) sind möglich, falls ein B<SIGKILL> den verfolgten " "Prozess gekillt hat." #. type: Plain text msgid "" "If tracee was attached using B<PTRACE_SEIZE>, group-stop is indicated by " "B<PTRACE_EVENT_STOP>: I<statusE<gt>E<gt>16 == PTRACE_EVENT_STOP>. This " "allows detection of group-stops without requiring an extra " "B<PTRACE_GETSIGINFO> call." msgstr "" "Falls ein verfolgter Prozess mittels B<PTRACE_SEIZE> angehängt wurde, wird " "ein Gruppenstopp durch B<PTRACE_EVENT_STOP> angezeigt: I<StatusE<gt>E<gt>16 " "== PTRACE_EVENT_STOP>. Dies ermöglicht, einen Gruppenstopp festzustellen, " "ohne dass ein zusätzlicher B<PTRACE_GETSIGINFO>-Aufruf erforderlich ist." #. type: Plain text msgid "" "As of Linux 2.6.38, after the tracer sees the tracee ptrace-stop and until " "it restarts or kills it, the tracee will not run, and will not send " "notifications (except B<SIGKILL> death) to the tracer, even if the tracer " "enters into another B<waitpid>(2) call." msgstr "" "Ab Linux 2.6.38 wird der verfolgte Prozess, nachdem der Verfolger den Ptrace-" "Stopp des verfolgten Prozesses sieht und bis er neu startet oder ihn killt, " "nicht laufen und keine Benachrichtigungen an den Verfolger senden (außer dem " "Tod durch B<SIGKILL>), nicht einmal, wenn der Verfolger in einen anderen " "B<waitpid>(2)-Aufruf gelangt." #. type: Plain text msgid "" "The kernel behavior described in the previous paragraph causes a problem " "with transparent handling of stopping signals. If the tracer restarts the " "tracee after group-stop, the stopping signal is effectively ignored\\(emthe " "tracee doesn't remain stopped, it runs. If the tracer doesn't restart the " "tracee before entering into the next B<waitpid>(2), future B<SIGCONT> " "signals will not be reported to the tracer; this would cause the B<SIGCONT> " "signals to have no effect on the tracee." msgstr "" "Das im vorhergehenden Absatz beschriebene Verhalten verursacht ein Problem " "bei transparenter Behandlung von Stoppsignalen. Falls der Verfolger den " "verfolgten Prozess nach einem Gruppenstopp neu startet, wird das Stoppsignal " "effektiv ignoriert – der verfolgte Prozess bleibt nicht gestoppt, er läuft. " "Falls der Verfolger den verfolgten Prozess neu startet, bevor er in das " "nächste B<waitpid>(2) eintritt, werden zukünftige B<SIGCONT>-Signale nicht " "an den Verfolger gemeldet. Dies würde dazu führen, dass die B<SIGCONT>-" "Signale keine Auswirkungen auf den verfolgten Prozess haben." #. type: Plain text msgid "" "Since Linux 3.4, there is a method to overcome this problem: instead of " "B<PTRACE_CONT>, a B<PTRACE_LISTEN> command can be used to restart a tracee " "in a way where it does not execute, but waits for a new event which it can " "report via B<waitpid>(2) (such as when it is restarted by a B<SIGCONT>)." msgstr "" "Seit Linux 3.4 gibt es eine Methode, die dieses Problem bewältigt: Statt " "B<PTRACE_CONT> kann ein B<PTRACE_LISTEN>-Befehl zum Neustart eines " "verfolgten Prozesses auf eine Weise benutzt werden, die ihn nicht ausführt, " "aber auf ein neues Ereignis wartet, das er über B<waitpid>(2) melden kann, " "wenn er zum Beispiel mit B<SIGCONT> neu gestartet wird." #. type: SS #, no-wrap msgid "PTRACE_EVENT stops" msgstr "PTRACE_EVENT-Stopps" #. type: Plain text msgid "" "If the tracer sets B<PTRACE_O_TRACE_*> options, the tracee will enter ptrace-" "stops called B<PTRACE_EVENT> stops." msgstr "" "Falls der Verfolger B<PTRACE_O_TRACE_*>-Optionen setzt, wird der verfolgte " "Prozess in B<PTRACE_EVENT>-Stopps genannte Stopps gelangen." #. type: Plain text msgid "" "B<PTRACE_EVENT> stops are observed by the tracer as B<waitpid>(2) returning " "with I<WIFSTOPPED(status)>, and I<WSTOPSIG(status)> returns B<SIGTRAP>. An " "additional bit is set in the higher byte of the status word: the value " "I<statusE<gt>E<gt>8> will be" msgstr "" "B<PTRACE_EVENT>-Stopps werden durch den Verfolger als als B<waitpid>(2) " "beobachtet, kehren mit »I<WIFSTOPPED(status)> true« zurück und " "I<WSTOPSIG(status)> gibt B<SIGTRAP> zurück. Es wird ein zusätzliches Bit in " "das höhere Bit des Status (Datentyp Word) gesetzt: Der Wert " "I<statusE<gt>E<gt>8> wird wie folgt sein:" #. type: Plain text #, no-wrap msgid " (SIGTRAP | PTRACE_EVENT_foo E<lt>E<lt> 8).\n" msgstr " (SIGTRAP | PTRACE_EVENT_foo E<lt>E<lt> 8).\n" #. type: Plain text msgid "The following events exist:" msgstr "Es gibt die folgenden Ereignisse:" #. type: TP #, no-wrap msgid "B<PTRACE_EVENT_VFORK>" msgstr "B<PTRACE_EVENT_VFORK>" #. type: Plain text msgid "" "Stop before return from B<vfork>(2) or B<clone>(2) with the B<CLONE_VFORK> " "flag. When the tracee is continued after this stop, it will wait for child " "to exit/exec before continuing its execution (in other words, the usual " "behavior on B<vfork>(2))." msgstr "" "stoppt vor dem Zurückkehren von B<vfork>(2) oder B<clone>(2) mit dem " "Schalter B<CLONE_VFORK>. Wenn der verfolgte Prozess nach diesem Stopp " "fortgeführt wird, wird er auf das Beenden/Ausführen des Kindprozesses " "warten, bevor er mit seiner Ausführung fortfährt (in anderen Worten, das " "übliche Verhalten auf B<vfork>(2))." #. type: TP #, no-wrap msgid "B<PTRACE_EVENT_FORK>" msgstr "B<PTRACE_EVENT_FORK>" #. type: Plain text msgid "" "Stop before return from B<fork>(2) or B<clone>(2) with the exit signal set " "to B<SIGCHLD>." msgstr "" "stoppt vor dem Zurückkehren von B<fork>(2) oder B<clone>(2) mit dem auf " "B<SIGCHLD> gesetzten Beendigungssignal." #. type: TP #, no-wrap msgid "B<PTRACE_EVENT_CLONE>" msgstr "B<PTRACE_EVENT_CLONE>" #. type: Plain text msgid "Stop before return from B<clone>(2)." msgstr "stoppt vor dem Zurückkehren von B<clone>(2)." #. type: TP #, no-wrap msgid "B<PTRACE_EVENT_VFORK_DONE>" msgstr "B<PTRACE_EVENT_VFORK_DONE>" #. type: Plain text msgid "" "Stop before return from B<vfork>(2) or B<clone>(2) with the B<CLONE_VFORK> " "flag, but after the child unblocked this tracee by exiting or execing." msgstr "" "stoppt vor dem Zurückkehren von B<vfork>(2) oder B<clone>(2) mit dem " "Schalter B<CLONE_VFORK>, aber nachdem die Blockade dieses verfolgten " "Prozesses durch Beenden oder Ausführung aufgehoben wurde." #. type: Plain text msgid "" "For all four stops described above, the stop occurs in the parent (i.e., the " "tracee), not in the newly created thread. B<PTRACE_GETEVENTMSG> can be used " "to retrieve the new thread's ID." msgstr "" "Für alle vier oben beschriebenen Stopps tritt der Stopp im Elternprozess auf " "(d.h. im verfolgenden Prozess), nicht im neu erstellten Thread. " "B<PTRACE_GETEVENTMSG> kann benutzt werden, um die Kennung des neuen Threads " "zu erhalten." #. type: TP #, no-wrap msgid "B<PTRACE_EVENT_EXEC>" msgstr "B<PTRACE_EVENT_EXEC>" #. type: Plain text msgid "" "Stop before return from B<execve>(2). Since Linux 3.0, " "B<PTRACE_GETEVENTMSG> returns the former thread ID." msgstr "" "stoppt vor dem Zurückkehren von B<execve>(2). Ab Linux 3.0, gibt " "B<PTRACE_GETEVENTMSG> die vorherige Thread-Kennung zurück." #. type: TP #, no-wrap msgid "B<PTRACE_EVENT_EXIT>" msgstr "B<PTRACE_EVENT_EXIT>" #. type: Plain text msgid "" "Stop before exit (including death from B<exit_group>(2)), signal death, or " "exit caused by B<execve>(2) in a multithreaded process. " "B<PTRACE_GETEVENTMSG> returns the exit status. Registers can be examined " "(unlike when \"real\" exit happens). The tracee is still alive; it needs to " "be B<PTRACE_CONT>ed or B<PTRACE_DETACH>ed to finish exiting." msgstr "" "stoppt vor dem Beenden (einschließlich des Todes aus B<exit_group>(2)), dem " "Signaltod oder endet, verursacht durch B<execve>(2), in einem Prozess aus " "mehreren Threads. B<PTRACE_GETEVENTMSG> gibt den Exit-Status zurück. " "Register können untersucht werden (solange nicht »wirklich« beendet wird). " "Der verfolgte Prozess ist immer noch lebendig; er benötigt zum Fertigstellen " "des Beendens B<PTRACE_CONT> oder B<PTRACE_DETACH>." #. type: TP #, no-wrap msgid "B<PTRACE_EVENT_STOP>" msgstr "B<PTRACE_EVENT_STOP>" #. type: Plain text msgid "" "Stop induced by B<PTRACE_INTERRUPT> command, or group-stop, or initial " "ptrace-stop when a new child is attached (only if attached using " "B<PTRACE_SEIZE>)." msgstr "" "Stopp, der durch einen B<PTRACE_INTERRUPT>-Befehl, einen Gruppenstopp oder " "ein »ptrace-stop« zu Beginn veranlasst wurde, wenn ein neuer Kindprozess " "angehängt wird (nur beim Anhängen mittels B<PTRACE_SEIZE>)." #. type: TP #, no-wrap msgid "B<PTRACE_EVENT_SECCOMP>" msgstr "B<PTRACE_EVENT_SECCOMP>" #. type: Plain text msgid "" "Stop triggered by a B<seccomp>(2) rule on tracee syscall entry when " "B<PTRACE_O_TRACESECCOMP> has been set by the tracer. The seccomp event " "message data (from the B<SECCOMP_RET_DATA> portion of the seccomp filter " "rule) can be retrieved with B<PTRACE_GETEVENTMSG>. The semantics of this " "stop are described in detail in a separate section below." msgstr "" "Stopp, der durch eine B<seccomp>(2)-Regel durch den Eintritt des verfolgten " "Prozesses in einen Systemaufruf ausgelöst wird, wenn " "B<PTRACE_O_TRACESECCOMP> vom Verfolger gesetzt wird. Die Seccomp-" "Ereignisdaten (von dem Anteil B<SECCOMP_RET_DATA> der Filterregel) können " "durch B<PTRACE_GETEVENTMSG> ermittelt werden. Die Semantik dieses Stopps " "werden in einem separaten Abschnitt weiter unten beschrieben." #. type: Plain text msgid "" "B<PTRACE_GETSIGINFO> on B<PTRACE_EVENT> stops returns B<SIGTRAP> in " "I<si_signo>, with I<si_code> set to I<(eventE<lt>E<lt>8)\\ |\\ SIGTRAP>." msgstr "" "B<PTRACE_GETSIGINFO> auf B<PTRACE_EVENT>-Stopps gibt B<SIGTRAP> in " "I<si_signo> zurück, wobei I<si_code> auf I<(eventE<lt>E<lt>8)\\ |\\ SIGTRAP> " "gesetzt ist."
Attachment:
signature.asc
Description: Digital signature