EXE-Binder ???



  • Hallo zusammen,

    weiss hier jemand wie man ein EXE-Binder schreibt???
    Also das Prog. muß zwei *.exe Dateien zu einem result.exe binden

    ich hab hier einiges gecodet aber das funzt nicht. Also der erste Datei wird problemlos ausgeführt, der zweite aber nicht. Was mache ich falsch?

    DWORD FileSize = 0, BytesRead = 0, BytesWritten = 0;
    HANDLE h1, h2;
    
    // Handle auf erste *.exe besorgen
    if((h1 = CreateFile(File1, GENERIC_WRITE, NULL, NULL, OPEN_EXISTING, NULL, NULL)) == INVALID_HANDLE_VALUE)
        return 0; // Fehler
    
    // Handle auf zweite *.exe besorgen    
    if((h2 = CreateFile(File2, GENERIC_READ, NULL, NULL, OPEN_EXISTING, NULL, NULL)) == INVALID_HANDLE_VALUE)
        return 0; // Fehler
    
    // Buffer anlegen und Daten auslesen
    FileSize = GetFileSize(h2, NULL);
    Buff = new char [FileSize];
    ReadFile(h2, Buff, FileSize, &BytesRead, NULL);
    
    // Filepointer auf das Ende des erste *.exe setzen und Daten rein schreiben
    SetFilePointer(h1, 0, 0, FILE_END);
    WriteFile(h1, Buff, FileSize, &BytesWritten, NULL);
    
    // Clear
    delete Buff;
    CloseHandle(h1);
    CloseHandle(h2);
    

    Ich hab keine Ahnung ob man sowas überhaupt so wie ich macht 🙄
    Hat hier jemand schon mal änliches gemacht???

    Danke!



  • Wie soll das auch gehen? Du schreibst einfach die 2te Exe Datei hinter die Erste. Das geht natürlich nicht.
    Entweder saugst du dir irgendeinen Exe-Joiner oder du machst dich über den PE-Header schlau: http://www.wotsit.org/



  • Was willst du denn im Endeffekt überhaupt damit machen - also wann soll er welche Anwendung ausführen? Oder willst du nur das nachher (nach Ausführen der "Doppel-Anwendung") wieder die beiden exe-Files vorliegen?

    Evtl. hilft dir auch das hier: http://www.c-plusplus.net/forum/viewtopic.php?t=69036



  • Also ich versuche nun mein Problem mit Resourcen zu lösen, und zwar es wird in
    einem bestehendem test.exe ein zweite start.exe als Resource geben.

    Es scheint zu funktionieren mit dem Resource auffinden ihn in Speicher zu laden
    und ein Pointer auf Anfang des Datei zu bekommen. Also mit diesem Pointer kann ich so zusagen auf mein in Arbeitspecher geladener start.exe zugreifen.

    Die Frage ist WIE????? Wie starte ich start.exe????? Oder mache ich wieder was falsch???? so sieht es aus:

    HGLOBAL hResource;
    static int *pData;
    
    hResource = LoadResource(hInstance, FindResource(hInstance, TEXT("BINTYPE"), MAKEINTRESOURCE(IDR_BINTYPE1)));
    
    pData = (int*) LockResource(hResource);
    
    // Hier muß Code stehen das mein start.exe startet. 
    
    FreeResource(hResource);
    
    return 0;
    

    Ich glaube ich drehe durch 🙄

    need help.............................................



  • Speicher pData als exe-Datei auf der Festplatte und benutz (z.B.) CreateProcess. Das ist das sicherste.

    Ansonsten befolge HARs Rat und schau dir den PE-Header an. Nur so bekommst du die Startadresse des Programms. Dass dir die allerdings viel nutzt, bezweifle ich. Der exe-Loader des Betriebssystems macht nämlich mehr als nur die exe in den RAM zu laden und auszuführen.
    Er erstellt unter anderem mehrere Segmente (Codesegment, Datensegment...); das wird wahrscheinlich schwierig nachzubilden sein.


Anmelden zum Antworten