Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [C++] Unione di due file
Forum - C/C++ - [C++] Unione di due file

Avatar
rocchissimo (Normal User)
Rookie


Messaggi: 24
Iscritto: 23/05/2013

Segnala al moderatore
Postato alle 13:15
Domenica, 13/04/2014
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

Codice sorgente - presumibilmente C/C++

  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.  printf("\n\nTutto OK\n\n");
  6. }



Prog.cpp

Codice sorgente - presumibilmente C/C++

  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. int main()
  5. {
  6.  printf("Tranquillo programma che non fa nulla\n\n");
  7.  getch();
  8. }



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

Unisci.cpp

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <conio.h>
  4.  
  5. int main()
  6. {
  7.  
  8. char buffer[1];
  9.           FILE *in1, *in2,*out;
  10.  
  11. in1=fopen("mini.exe","rb");
  12. in2=fopen("prog.exe","rb");
  13. out=fopen("total.exe","wb");
  14.  
  15.           while(fread(buffer,1,1,in1)) fwrite(buffer,1,1,out);
  16.           while(fread(buffer,1,1,in2)) fwrite(buffer,1,1,out);
  17.           fclose(in1);
  18.           fclose(in2);
  19.           fclose(out);
  20.  
  21.          
  22.  printf("\nOperazioni completate");
  23. getch();
  24.          
  25. return 0;
  26.  
  27. }



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


        ,           ,
       /             \
   ((__---,,,---__))
      (_) O O (_)_________
         \ _ /               |\
          o_o \   M S F   | \
               \   _____  |   *
                |||   WW|||
                |||          |||
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1451
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 13:38
Domenica, 13/04/2014
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....

PM Quote
Avatar
rocchissimo (Normal User)
Rookie


Messaggi: 24
Iscritto: 23/05/2013

Segnala al moderatore
Postato alle 14:04
Domenica, 13/04/2014
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

http://www.pierotofy.it/pages/extras/forum/2/23101-come_un ...

gli do subito un occhiata


        ,           ,
       /             \
   ((__---,,,---__))
      (_) O O (_)_________
         \ _ /               |\
          o_o \   M S F   | \
               \   _____  |   *
                |||   WW|||
                |||          |||
PM Quote