ausführbare dateien kopieren ?



  • hallo programmierfreunde 🙂

    ich kann mit C sowohl dateien in formaierten zustand öffnen und manipulieren als auch dateien im low level bereich öffnen und verändern. ich dachte, ich könnte eine ausführbare datei öffnen und in eine andere leere datei schreiben, quasi kopieren. wenn ich die neue datei ausführen möchte, dann fehlt immer irgendwas ...

    ein beispiel mit high level:

    #include <stdio.h>
    
    int main() {
    	FILE *src, *dest;
    	char swap[1000000];
    	int c;
    
    	src=fopen("c:\\tippen.exe","r+b");
    	dest=fopen("c:\\neu.exe","w+b");
    
    	if(src==NULL && dest==NULL)
    		fprintf(stderr,"FEHLER !!!!!!!!!!!\n");
    
    	while((c=fgetc(src))!=EOF) {
    		fputc(c,dest);
    	}
    
    	fclose(dest);
    	fclose(src);
    
    	return 0;
    }
    

    das hier scheint zu funktionieren 🙂
    leider kann ich das von low level nicht gerade behaupten ...
    ich brauche für die low level, die funktion "open", damit ich ein "handle" habe, dieser ist ja nichts weiter als ein integerwert ... desweiteren kenne ich nur die beiden funktionen "write" und "read" um zeichen in ene datei zu schreiben ... das dumme ist nur, das ich explizit structuren brauche, die eine feste größe haben müssen und zur laufzeit des programms nicht bekannt sind 😞 ... kennt da jemand eine alternative ???

    please help



  • /EDIT: falsch verstanden...



  • fgetc und "rb" Modus ist keine gute Idee. man: fread(3) und man: fwrite(3) sollen dir mehr helfen.



  • if(src==NULL && dest==NULL)

    soll bestimmt

    if(src==NULL || dest==NULL) heißen.

    Sonst siehe einen Post über dem hier. fread sollte das Problem beheben.



  • fgetc sollte auch funktionieren:

    #include <stdio.h>
    
    int main() {
        FILE *src, *dest;
        int c;
    
        src=fopen("c:\\tippen.exe","r+b");
        dest=fopen("c:\\neu.exe","w+b");
    
        if(src==NULL || dest==NULL)
            fprintf(stderr,"FEHLER !!!!!!!!!!!\n");
    
        while( 1 ) {
            c = fgetc( src );
            if( feof( src ) ) break;
    
            fputc(c,dest);
        }
    /* eigentlich geht das mit do() und nicht mit while() oder so, aber hab ich noch nie benutzt und will jetzt nix falsches sagen :)
    
        fclose(dest);
        fclose(src);
    
        return 0;
    }
    


  • achja, und zu open und read, das müsste so gehen:

    char buffer[1000];
    int fd = open( "bla", O_RDONLY );
    int out = open( "moep", O_WRONLY );
    int bytesGelesen = read( fd, buffer, 1000 );
    write( out, buffer, bytesGelesen );
    close( fd );
    close( out );
    

    so entnehm ich das jedenfals "man 2 read" "man 2 write" und "man 2 open"


Anmelden zum Antworten