Zeitauskunft (war: Re: [linux-l] Dateien mit '/' im Dateinamen)
Steffen Dettmer
steffen at dett.de
Do Jul 31 08:55:41 CEST 2003
* Jan-Benedict Glaw wrote on Wed, Jul 30, 2003 at 12:52 +0200:
> Ist vom Prinzip her ganz einfach (ich häng' mal 'was an, mit
> dem ich lib-Aufrufe abfange), funktioniert hier aber nicht, da
> LD_PRELOAD-libs nicht auf setuid-Programme (vmware ist
> sowas!!!) angewandt werden.
Na ja, kriegt man aber systemweit hin.
> Für die libc-Funktionen atexit() und on_exit() sieht das z.B. so aus:
Versteh ich nicht.
>
> ----------- new-at_on_exit.c -----------------
[...]
Ist die Funktion, die bei Programmende gerufen wird, korrekt?
> int
> atexit(void (*function)(void))
> {
> static int (*orig_atexit)(void (*)(void)) = NULL;
> FILE *fp;
> struct timeval tv;
>
> if(!orig_atexit)
> orig_atexit
> = (int (*)(void (*)(void)))dlsym(INTERCEPT_TARGET, "atexit");
Hier wird also die Address von "atexit" gespeichert, wenn noch
keine gespeichert ist.
> gettimeofday(&tv, NULL);
>
> if((fp = fopen("/tmp/atexit", "w+"))) {
> fprintf(fp, "%ld.%06ld atexit(%p) called by %p\n",
> tv.tv_sec,
> tv.tv_usec,
> function,
> __builtin_return_address(0));
> fclose(fp);
> }
Zeiutstempel in Datei. ist nur zu Debugzwecken?
> if(orig_atexit)
> return (*orig_atexit)(function);
> else
> return -1;
> }
Orginalen at_exit aufrufen.
So, was macht das nu für einen Sinn? Versteh ich überhaupt nicht.
Kannste mal bitte einen Satz Erleuchtung in mein Dunkel bringen
:) Danke! Ist das nur als Beispiel gedacht, damit man sieht, daß
wie man eine Libfunktion ersetzt (einfach eine gleichnamige mit
LD_PRELOAD bereitstellen)?
> #define INTERCEPT_TARGET RTLD_NEXT
Kennt meine Man-Page nicht.
Bei Kernelmodulen funktioniert das wohl recht einfach, einen Call
abzufangen: man schreibt einfach in "extern void *sys_call_table[];"
seinen Funktionspointer. Falls jemand interesse hat, könnte ich
mal ntp.c mailen (das macht ptrace für uid != 0 platt). So müßte
man auch gettimeofday - oder was der Kernel da anbietet -
umbiegen können, denke ich. Oder?
oki,
Steffen
--
Dieses Schreiben wurde maschinell erstellt,
es trägt daher weder Unterschrift noch Siegel.
Mehr Informationen über die Mailingliste linux-l