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