linux-l: Paramter rausfinden?
Jens Dreger
jens.dreger at physik.fu-berlin.de
Mi Nov 15 00:55:35 CET 2000
On Tue, Nov 14, 2000 at 07:45:22PM +0100, Sven Guckes wrote:
> * Benedikt Garski <ben9000 at gmx.net> [001114 18:05]:
> > Nicht alle Parameter sind bei jedem Programm in der Man-Page
> > dokumentiert! Vielleicht habe ich jetzt zu naive Vorstellungen zum
> > Aufbau einer ausführbaren Datei, aber gibt es vielleicht ein Programm
> > was alle möglichen Übergabeparameter einer ausführbaren Datei zeigt?
>
> Nein. Kann es nicht geben - im sehr theoretischen Sinne.
Jaja, die Theoretiker...
Da waere noch der BruteForce-Approach(tm). Wir nehmen mal an, dass die
meisten Tools, die wir so untersuchen wollen, getopt(3) oder
getopt_long(3) verwenden. Na, dann ersetze man einfach diese
Funktionen innerhalb der dynamisch gelinkten Programme durch eine
Print-Anweisung.
Also:
-------8<--------------------
// compile with: gcc -shared -fPIC -Wl,-x getopt.c -o getopt.so
#include <unistd.h>
#include <stdio.h>
#include <getopt.h>
int getopt(int argc, char * const argv[], const char *optstring) {
puts(optstring);
exit(0);
}
int getopt_long(int argc, char * const argv[],
const char *optstring,
const struct option *longopts, int *longindex) {
puts(optstring);
exit(0);
}
int getopt_long_only(int argc, char * const argv[],
const char *optstring,
const struct option *longopts, int *longindex) {
puts(optstring);
exit(0);
}
-----------8<--------------------
Danach rufe man das zu untersuchende Tool folgendermassen auf:
dreger at smart:..belug/getopt> LD_PRELOAD=./getopt.so ls
abcdefghiklmnopqrstuvw:xABCDFGHI:LNQRST:UX1
Das sind alle Optionen, die 'ls' versteht. Ein ':' hinter einem
Buchstaben bedeutet, dass die Option ein Argument verlangt.
Ganz stimmt dies noch nicht, da wir die long-Options (--blah=blub)
noch nicht haben. Dazu muesste man einfach die longopt-Liste
langhangeln und die ausgeben. Ueberlasse ich mal als Uebungsaufgabe an
den Leser ;)
Gruss,
Jens.
PS: Bei x-programmen wird das nicht funktionieren, da muesste man wohl
andere Funktionen ersetzen...
Mehr Informationen über die Mailingliste linux-l