Oppure

Loading
13/04/14 11:15
rocchissimo
Buongiorno e buona domenica,

Avendo un pò di tempo libero ho provato a realizzare un programmino in C++ che partendo da due eseguibili ne crei uno solo contenente entrambi.
Per testarlo ho realizzato i due programmi, sempre in C++, che dovranno essere uniti:

mini.cpp

#include <stdio.h>

int main()
{
 printf("\n\nTutto OK\n\n");
}


Prog.cpp

#include <stdio.h>
#include <conio.h>

int main()
{
 printf("Tranquillo programma che non fa nulla\n\n");
 getch();
}


e il programma che dovrebbe aprirli, leggerli e scrivere un terzo file che contenga entrambi:

Unisci.cpp

#include <stdio.h>
#include <iostream>
#include <conio.h>

int main()
{

char buffer[1];
          FILE *in1, *in2,*out;

in1=fopen("mini.exe","rb");
in2=fopen("prog.exe","rb");
out=fopen("total.exe","wb");

          while(fread(buffer,1,1,in1)) fwrite(buffer,1,1,out);
          while(fread(buffer,1,1,in2)) fwrite(buffer,1,1,out);
          fclose(in1);
          fclose(in2);
          fclose(out);

          
 printf("\nOperazioni completate");
getch();
         
return 0;

}



Il problema è che se provo ad eseguire il file creato (total.exe) l'output è identico all'output di mini.exe benchè la dimensione del file generato dal programma sia uguale alla somma dei due programmi di partenza.

Da questo ho dedotto che il problema si presenti perchè avendo compilato i due file iniziali individualmente il file finale abbia una struttura simile:

------ Inizio file 1 ------
------ Contenuto ------
------ Fine file 1 ------ //Quì ipotizzo sia presente un istruzione che dica più o meno: "Siamo arrivati alla fine del programma, perciò esco" ignorando bellamente tutto il resto del file.
------ Inizio file 2 ------
------ Contenuto ------
------ Fine file 2 ------

Come protrei risolvere? Quello che ho ipotizzato è corretto?

Saluti
aaa
13/04/14 11:38
TheDarkJuster
Gli eseguibili non sono fatti come una serie di istruzioni consecutive (non solo), almeno, non quelli di windows/unix. Se stai cercando di "unire" due eseguibili hai bisogno di studiare il formato di eseguibile che ti interessa (se .exe allo Portable Executables) e scrivere una specia di disassemblatore e "ricombinare" un po di cose, e per finire scrivere un entry point che consente di eseguire, o uno o l' altro, o uno dopo l' altro. Attualmente sono sopreso che un eseguibile come quello che hai fatto tu funzioni....
aaa
13/04/14 12:04
rocchissimo
Grazie per la risposta,

anche io mi aspettavo un "Il file non è un applicazione win32 valida ect. ect."
ovvero che non gli piacesse il collage.

oltretutto mi sono accorto che avevano già aperto una discussione, identica alla mia

pierotofy.it/pages/extras/forum/2/23101-come_unire_due_file_eseguibili/

gli do subito un occhiata
aaa