EXE verdoppeln?



  • Hallo zusammen ...

    Ich habe mal eine Frage...

    Ich habe ein Programm:

    #include <stdio.h>
    int main(int argc, char* argv[])
    {
       printf("Test");
    }
    

    Dieses Programm habe ich als exe kompiliert (Test.exe).

    nun habe ich folgendes Programm:

    #include <stdio.h>
    int main(int argc, char* argv[])
    {
       FILE *in, *out;
    
       in   = fopen("Test.exe", "rb");
       out  = fopen("Doppeltest.exe", "wb");
    
       while (in && !feof(in))
       {
          fputc(fgetc(in), out);
       }
    
       while (in && !feof(in))
       {
          fputc(fgetc(in), out);
       }
    
       fclose(in);
       fclose(out);
    }
    

    Wenn ich nun Doppeltext.exe ausführe, erscheint jedoch nur einmal Test in einem Konsolenfenster.

    Wie kann ich es schaffen, dass 2x Test erscheint, ohne die Test.exe zu ändern?

    Vielen Dank für eure Hilfe!



  • Nicht, indem du zwei Executeables hintereinanderkopierst. Du mösstest den Call zu printf aufspüren (incl. push/pop der Parameter) und diesen Teil zweimal hintereinander einfügen, oder um den call eine Schleife bauen.

    greetz, Swordfish

    PS: wofür? Spielerei?



  • Frage hat sich erledigt.

    Vielen Dank für eure Hilfe!



  • Danke für den post, welcher nicht in MEINEM Namen war!

    Es handelt sich tatsächlich um eine Spielerei! Ich möchte die main Funktion 2 mal aufrufen ...

    LG



  • ISO/IEC 14882:2003 (E) schrieb:

    3.6.1 Main function

    [...]

    3 The function main shall not be used (3.2) within a program. [...]
    4 Calling the function void exit(int); declared in <cstdlib> (18.3) terminates the program [...]
    5 A return statement in main has the effect of leaving the main function (destroying any objects with automatic
    storage duration) and calling exit with the return value as the argument. If control reaches the end
    of main without encountering a return statement, the effect is that of executing return 0;

    greetz, Swordfish

    BTW: Vielleicht sollte der Thread nach WinAPI verschoben werden...



  • Danke für deine Antwort ... aber irgendwie werde ich daraus nicht schlau!

    Kannst du das mal genauer erklären?

    LG



  • Hm, warum ich geschrieben habe, dass Du in WinAPI besser aufgehoben wärst, kann ich mir im nachninein nicht mehr erklären 😕

    Du darfst die Funktion main nicht zweimal aufrufen! Den (Binär-) Code der main hintereinander zu kopieren bringt Dir auch nix:

    (Code nur sinngemäß!)

    #include <cstdio>
    
    int main( ) {
    
        std::puts( "sonstwas" );
        return 0;  // implizit oder explizit ist egal -> Kontrolle zurück an die CRT.
    }
    
    int main( ) {
    
        std::puts( "sonstwas" );
        return 0;
    }
    

    Somit müsstest du den Binärcode kopieren, aber keine ganzen Funktionen. Eine einfache Lösung dafür gibt's nicht und mir fällt auf die schnelle auch beim besten Willen kein praxisrelevantes Beispiel ein, bei dem man ein solches gefrickel bräuchte/haben möchte.

    greetz, Swordfish



  • Hallo

    Das Zitat sagt aus das die standardisierte main-Funktion nicht mehrmals innerhalb eines Programms ausgeführt werden darf.
    Ohne das Original-Programm zu ändern kannst bestenfalls ein Programm zweimal hintereinander aufrufen und ausführen (siehe auch Batch-Datei).

    bis bald
    akari



  • #include <cstdlib>
    #include <fstream>
    #include <iostream>
    
    int main(int argc, char** argv)
    {
        {
            std::ifstream file_stream_in(argv[0]);
            std::ofstream file_stream_out("copy.exe");
            file_stream_out << file_stream_in.rdbuf();
        }
        std::system("copy.exe");
        std::clog << "Second instance started!" << std::endl;
    
        std::cout << "Let's do some interessting stuff!" << std::endl;
    }
    

    ... fertig 😃



  • Gibt 'ne schöne Endlosschleife, oder?

    greetz, Swordfish



  • (D)Evil schrieb:

    #include <cstdlib>
    #include <fstream>
    #include <iostream>
    
    int main(int argc, char** argv)
    {
        {
            std::ifstream file_stream_in(argv[0]);
            std::ofstream file_stream_out("copy.exe");
            file_stream_out << file_stream_in.rdbuf();
        }
        std::system("copy.exe");
        std::clog << "Second instance started!" << std::endl;
       
        std::cout << "Let's do some interessting stuff!" << std::endl;
    }
    

    ... fertig 😃

    letz bomb da n00bs 😃


Anmelden zum Antworten