Unix-Tools 7: strings
Nun zum Programm selbst. Zu Demonstrationszwecken habe ich ein kleines C-Programm geschrieben:
1 2 3 4 5 6 | #include <stdio.h> int main(int ac, char **av) { printf("Hallo Welt!\n"); return 0; } |
Das Listing habe ich danach mit gcc test.c
kompiliert. Danach ist eine neue Datei im Verzeichnis vorhanden: a.out
– eine ausführbare Datei. Dies sei nur angemerkt für die Nicht-Programmierer unter euch, so dass jeder folgen kann.
Ein einfaches strings a.out
durchsucht also die wichtigsten Sektionen der ausführbaren Datei nach Zeichenketten wie z.B. unser “Hallo Welt!” aber auch die vom Compiler eingebauten Versions- und Funktionsverzeichnisse. Wem das nicht genug ist, kann mit dem Schalten –a
(all, dt. alle) die ganze Datei durchsuchen lassen (standardmäßig werden nur die initialisierten und geladenen Sektionen der Objektdatei gelesen). Wer sich die Ausgabe genauer anschaut, erkennt z.B., dass der Name des Betriebssystems ausgegeben wird. In meinem Fall:
GCC: (GNU) 4.1.1 (Gentoo 4.1.1)
Wer mehrere Dateien durchsucht, kann sich mit –f
(file names, dt.: Dateinamen) den aktuellen Dateinamen vor dem Fund anzeigen lassen. –n
gibt die Mindestlänge an, die ein ein String haben muss, damit er ausgegeben wird. Um sich in einer Datei besser zu orientieren, kann man –t
in Verbindung mit einem o
(oktal, Basis 8), d
(dezimal, Basis 10) oder x
(hexadezimal, Basis 16) angeben. –e
(encoding, Kodierung) spezifiziert den Zeichensatz in welchem die Ausgabe erfolgen soll. Neben weiteren Schaltern, wie –T
für externe Objektcodeformate, finde ich @
noch wichtig, der die Parameterliste aus einer Datei liest was als abschließendes Beispiel gezeigt werden soll:
1 2 3 4 5 6 7 | titan% cat coms -a -t x a.out titan% strings @coms a.out 154 /lib/ld-linux.so.2 221 __gmon_start__ 230 libc.so.6 [...] |