Danke,
der Code lässt sich ohne Fehler compilieren. Ich habe es mit gcc -o beisp beisp.c gemacht (cc ist bei mir ein Symlink auf gcc) weil die Datei bei mir beisp.c heißt. Danach hatte die Datei beisp automatisch die Rechte 755. Wenn ich nun ./beisp ausführe kommt:
bash: ./beisp: cannot execute binary file
Andere C Programme laufen in dem Verzeichniss mit den selben Rechten einwandfrei. Liegt es an mir oder an dem Programm?
MfG
Bernhard

[EMAIL PROTECTED] schrieb:

rn fehlt ....

Oops, sieht ja wie code fuer Obfuscated C Contest :-( sorry!


also nochmal als Text:

Kompillieren mit: cc -o strexmpl strexmpl.c >>>>>>>>>>>>>> strexmpl.c
#include <stdio.h>
#define CUSTOM_PATH "/init/"
#define BUFLEN  1024

/*!
Original open Funktion. Hier als Dummy, nur fuer die Testausgaben
*/
int orig_open( const char* path, int flags ){
  printf("orig_open( path=%s, flags=%d)n",   path, flags );
}


/*!
Variante 1 mit Buffer fester Laenge. Einerseits wird evtl. unnoetig viel Speicher reserviert, andererseits
(aber weniger wahrscheinlich) kann der reservierte Speicher nicht ausreichen
*/
int open1( const char* path, int flags  ){
char buff[BUFLEN] = CUSTOM_PATH; // Buff enthaelt jetz "/init/ strcat (buff,path); // Nun steht komplette Path in Buff. return orig_open( buff, flags );
}

/*!
Variante 2 nur tatsaechlich benoetigte Speichermenge dynamisch allokieren
*/
int open2( const char* path, int flags  ){
  char * buff = 0;  // Zeiger Buff mit 0 (NULL) initialisiert
// Speicher mit korrekter Laenge (+1 wg. String-abschliessender Null) allokieren
  // und den buff-Zeiger darauf zeigen lassen
  buff = (char *) malloc ( strlen( CUSTOM_PATH ) + strlen(path) +1 );
strcpy(buff,CUSTOM_PATH); // Buff enthaelt jetz "/init/ strcat(buff,path); // Nun steht komplette Path in Buff. return orig_open( buff, flags );
}


int main( int ac, char **al ){
 printf("Tests fuer open1n");
 // Testaufrufe
 open1("etc/passwd", 0);
 open1("usr/bin", 0);
 open1("var/log/httpd.log", 0);
printf("nnTests fuer open2n");
 // Testaufrufe
 open2("etc/passwd", 0);
 open2("usr/bin", 0);
 open2("var/log/httpd.log", 0);
return 0;
}
<<<<<<<<<<<<<<<<<< eof


--
----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org

Antwort per Email an