Das strace
Dienstprogramm zeigt Ihnen Systemaufrufe. Die meisten unter Linux kompilierten Programme sind mit der Standard-C-Bibliothek verknüpft, die als "glibc" bezeichnet wird, obwohl der tatsächliche Bibliotheksdateiname mit bestimmten Codezeilen in einer Quelldatei ausgegeben wird.libc.so.6
. C-Systemaufrufe wie "open", "read", "write" sind tatsächlich Wrapper-Funktionen für die eigentlichen Systemaufrufe, die die glibc-Bibliothek ausführt. Manchmal enthalten die Wrapper eine überraschende Menge Code, über den Sie normalerweise nicht nachdenken. Manchmal verwenden Programmierer Bibliotheken mit Funktionen, die mehrere Glibc-Aufrufe ausführen und mehrere Systemaufrufe ausführen. Wenn Sie außerdem ein bestimmtes "Lesen" in der strace
Ausgabe sehen, haben Sie keine Möglichkeit, sie mit einem bestimmten "Lesen" oder einem anderen Bibliotheksfunktionsaufruf im Quellcode zu verbinden.strace
Ich gehe davon aus, dass, wenn Sie angeben, dass Sie über den Quellcode verfügen, Sie meinen, dass Sie ihn auch in ein funktionierendes ausführbares Programm kompilieren können. Wenn dies tatsächlich der Fall ist, ist es am besten, den Code mit printf
s zu instrumentieren fflush(stdout)
und dann das Programm unter auszuführen strace
. Für die printf
s können Sie so etwas versuchen
printf(__FILE__ ", %s:%d Entered\n", __FUNCTION__, __LINE__), fflush(stdout);
am Anfang jeder C-Funktion. Sie können die obige Zeile als Präprozessor-Makro definieren, das bedingt als obiges oder als nichts definiert ist, abhängig von einem anderen Makro wie z. B. DEBUG
, damit Sie diese Makros in Ihrer Codebasis belassen und den Code mit oder ohne DEBUG
definiert kompilieren können .
Sie sehen die printf
"write" -Systemaufrufe und ihre Ausgabe zwischen den Systemaufrufen, die die Tastenanschläge lesen. Auf diese Weise können Sie die Quelltextfunktionen, die den Eingang tty lesen, auf Null setzen. Es kann einige beharrliche Anstrengungen erfordern.