Denn es gibt kein Konzept für einen Syscall-Namen auf diesem niedrigen Niveau. Es gibt keine Möglichkeit strace
, "Hey, lass uns fcntl()
anrufen und sehen, was die Nummer ist!". Es kann nur Anrufe tätigen, die auf den Syscall-Nummern selbst basieren. Dies liegt daran, dass ein Syscall ausgeführt wird, wenn die Syscall-Nummer im eax
oder rax
Register gespeichert wird und der Prozess int 0x80
oder aufruft syscall
.
Warum verwendet strace keine Testsyscalls, um ihre Indizes in der Systemaufruftabelle herauszufinden?
Ich verstehe, dass der strace
Befehl verwendet wird ptrace(PTRACE_PEEKUSER, child, __builtin_offsetof(struct user, regs.orig_eax))
, um den Index eines Systemaufrufs zu ermitteln, bei dem das Tracee-Kind eingeschlossen ist. Um dann den Index in den syscall-Funktionsnamen zu übersetzen, wurden Tabellen erstellt, die aus den in der Installation vorhandenen Linux-Quellcode-Headern erstellt wurden.
Diese Methode muss undokumentiert und fehleranfällig sein, da der Speicherort und die Syntax der Quelltextdeklarationen nicht dokumentiert sind, von grepping gefunden werden müssen und sich auf unbekannte Weise ändern können. Kann ich das richtig sagen?
Wenn dem so ist, warum, warum, würde strace
ich die folgende Methode nicht verwenden, scheint mir einfacher, stützt sich nur auf Dokumentation und ist daher idiotensicher.
Beim Start des ersten Laufs nach dem Neustart strace
wird ein Testsyscall gesendet, einer für jede Syscall-Funktion, der diese abfängt und beobachtet, welchen Syscall-Index das Kind verwendet. Dies ergibt eine vollständige und korrekte benutzerdefinierte Tabelle, die in einer Datei gespeichert werden kann, die weiteren Aufrufen von bekannt ist strace
.
Ich bin sicher, dass diese Methode in Betracht gezogen werden muss, da sie nichts besonders Geniales ist. Es muss also etwas falsch sein. Was ist falsch??
1 Antwort auf die Frage
Verwandte Probleme
-
1
Werden strace watch Systemaufrufe rekursiv auf untergeordnete Prozesse des beobachteten Hauptprozess...
-
1
Warum fixiert strace / truss manchmal steckende Prozesse?
-
1
Seltsames Verhalten von Strace und Setuid: Berechtigung unter Strace verweigert, läuft aber nicht no...
-
2
Wie funktioniert "strace"?
-
5
Linux-Äquivalent zu fs_usage von Mac OS X
-
2
Debuggen von Verbindungs-Timeouts mit strace?
-
2
Wie spanne ich das ganze System?
-
1
Wie berechnet und gruppiert man die Zeitunterschiede bestimmter Systemaufrufe beim Ausführen von str...
-
2
Schnittstelle mit Prozessname anstelle von PID verbinden
-
1
Was ist ein SIG_0 beim Betrachten einer Strace?