C++ Exe erstellt C++ Exe Wie??



  • Ist es möglich, dass eine C++ Exe eine andere C++ Exe erstellt?
    Weil ich möchte mit einer Console Application mit Variablen arbeiten die wiederrum in einer anderen Exe mit verwendet wird, aber die C++ Exe wird von der Console Application erstellt. Wie stell ich das an??

    Hier mal ein BEISPIEL es ist nur ein BEISPIEL wie ich das mein 😃

    ...
    int variable = 123;
    
    std::ofstream C++_EXE ("C++ EXE.exe");
              C++_EXE << "#include <iostream>" << std::endl;
              C++_EXE << "..." << std::endl;
              C++_EXE << variable << std::endl;   // Hier kommt die Variable hinein
              C++_EXE << "..." << std::endl;
    C++_EXE.close();
    

    So dass ist mein Beispielcode

    Bitte um Hifle 😕



  • ZOMFG du hast absolut gar keine Ahnung.
    Lerne Grundlagen. Jetzt! Gleich!



  • Klar, was meinst Du, was ein Compiler macht?



  • Wieso probierst du es nich aus ? 🙂
    Ne kann aber nicht funktionieren. Damit hättest du nur den Quellcode geschaffen. Danach müsstest du noch nen Compiler drüber laufen lassen, dann sollte es funktionieren.
    Denk ich doch. :p
    Ansonsten Flamed und bestraft mich für meine Unwissenheit 😃 😃 😃 😃



  • Nein so einfach ist das bestimmt nicht, du brauchst schon einen Compiler. Aber mein Blödsinndetektor schlägt bei dir an =>

    Weil ich möchte mit einer Console Application mit Variablen arbeiten die wiederrum in einer anderen Exe mit verwendet wird, aber die C++ Exe wird von der Console Application erstellt.

    Nochmal: Wieso willst du ein Programm dynamisch schreiben?
    Wenn du nur Variablen teilen willst speicherst du die benötigten Daten einfach in einer Datei und lädst sie in der anderen.



  • WoW Kenn0r jetzt mal ganz ruhig, du hast ja gar keine Ahnung, sonst hättest was sinnvolles geschrieben! Oder seh ich das Falsch??



  • Kommen in diesem Forum auch mal halbwegs vernünftige Antworten? Denn mich würde das auch interessieren.



  • @JustAnotherNoob
    ZITAT: Wenn du nur Variablen teilen willst speicherst du die benötigten Daten einfach in einer Datei und lädst sie in der anderen

    Das war mir zuvor auch schon bekannt (und kann es), aber ich möchte eine Eingabe des Users entgegen nehmen und in einer Variable speichern die wiederrum in der *neu erstellten* c++ Exe vorhanden ist um mit iher operiert werden kann.

    Es soll in keiner Datei gespeichert werden sondern in der neuen EXE drin sein.


  • Mod

    Da sich ja hier beschwert wurde, dass keine vernünftigen Antworten kommen:

    Ja, es ist natürlich möglich, mit C++ Executables zu erstellen. Wenn du nicht gerade im Compilerbau begabt bist, willst du das aber nicht aus dem nichts machen. Eine Möglichkeit, wenn dieser Weg trotzdem gegangen werden muss (siehe unten für Alternativen), dann kann man das so machen:

    Du erstellst dein Programm, das später die Werte erhalten soll. Anstatt der Werte schreibst du irgend ein auffälliges Stringliteral in die Datei, z.B. "XXXXXXXXXX". Falls die Werte nicht vom Typ string sind, muss dein Programm sie aus dem Literal extrahieren (z.B. mittels stringstream). Diese Programm kompiilierst du.
    Das andere Programm, dass die modifizierte Exe erstellen soll, liest dann die Executable des ersten Programms ein und verändert den String XXXXXXXXX der sich ja leicht finden lässt und schreibt die modifizierte Version wieder raus. Fertig, genau so wie im Anfangspost gewünscht.

    Und jetzt die eigentliche Antwort: Du denkst VIEL zu umständlich. Was meinst du, wie Programme in einem Computer sonst miteinander kommunizieren? Da gibt es ungeheuer viele Möglichkeiten, die in verschiedenen Situationen mehr oder weniger gut geeignet sind, aber alle sind VIEL einfacher als das oben genannte. Ein paar Vorschläge:
    Dateien wie von JustAnotherNoob vorgeschlagen, Kommandozeilenargumente, InterProzess-Kommunikation, Fehlercodes, Pipes (named und unnamed), ein Skript das beide Programme ausführt und Werte übergibt.

    Das sind nur ein paar, die mir spontan einfallen. Bei Computern dreht sich alles um das herumreichen von Werten, aber niemand würde das dermaßen umständlich machen wie der OP es vorschlägt.



  • Du erstellst dein Programm, das später die Werte erhalten soll. Anstatt der Werte schreibst du irgend ein auffälliges Stringliteral in die Datei, z.B. "XXXXXXXXXX". Falls die Werte nicht vom Typ string sind, muss dein Programm sie aus dem Literal extrahieren (z.B. mittels stringstream). Diese Programm kompiilierst du.
    Das andere Programm, dass die modifizierte Exe erstellen soll, liest dann die Executable des ersten Programms ein und verändert den String XXXXXXXXX der sich ja leicht finden lässt und schreibt die modifizierte Version wieder raus. Fertig, genau so wie im Anfangspost gewünscht.

    Danke für die Antwort 🙂

    Hättest du vielleicht ein Beispiel dafür?



  • SDS schrieb:

    Hättest du vielleicht ein Beispiel dafür?

    Ein Beispiel wäre schon die Lösung, und bisserl anstrengen sollst du dich schon selber 😛

    Ich finde das aber seeeehr fragwürdig. Dein Ansatz. Denn eine Exe zu verändern bringt erst was für deren nächsten Start! Und dann kannst du eigentlich auch gleich alles aus ner Datei lesen, denn ob du jetzt in der erstellenden Anwendung per ostream in deiner exe rumfummelst oder eine einfache Textdatei änderst ist nicht nur wurscht. Die Textdatei enthält sortiert die Werte, die schnell ausgelesen werden können. In der Exe musst du erstmal suchen, dann ersetzen. Und hoffen dass du keinen Mist gebaut hast...

    Wenn du vorhaben solltest, Interprozesskommunikation zu betreiben geht das so eh nicht! Denn die Exe zu ändern ändert nicht ein bereits laufendes Programm! Du kannst durch Exemanipulieren nicht das laufende Programm steuern. Also bitte bitte beschreib doch mal dein Anliegen genauer 😞


  • Mod

    SDS schrieb:

    Hättest du vielleicht ein Beispiel dafür?

    Hast du die anderen Antworten gelesen und verstanden? Ist dir klar, dass du so komische Antworten bekommst, weil sich insgeheim alle lustig machen über deinen Ansatz?

    Wenn du beide Fragen mit Ja beantwortet hast, dann hast du hier ein funktionierendes Beispiel, der jedoch sehr fehleranfällig gegenüber falscher Benutzung ist:

    aufnehmer_prototyp.cpp, kompilieren zu aufnehmer_prototyp.exe:

    #include<sstream>
    #include<iostream>
    #include<string>
    
    using namespace std;
    
    int main(){
    	int i; string j; double k; char l;
    	stringstream("XXXXXXXXXXXXXXXXX") >> i >> j >> k >> l;  // Dies sind 18 X
    
    	cout << "Hier wurden eingelesen:\n"
    		 << "- Ein int mit Wert " << i << '\n'
    		 << "- Ein string mit Wert " << j << '\n'
    		 << "- Ein double mit Wert " << k << '\n'
    		 << "- Ein char mit Wert " << l << endl;
    }
    

    abgeber.cpp, die daraus erzeugte exe muss aufnehmer_prototyp.exe finden können und schreibt dann eine neue Datei aufnehmer.exe mit den neuen Werten:

    #include<string>
    #include<iostream>
    #include<fstream>
    #include<algorithm>
    #include<sstream>
    
    using namespace std;
    
    int main(){
    	/* einlesen der Werte */
    	string neue_werte;
    	do {
    		cout << "Es werden 4 Werte benötigt. Alles zusammen darf nicht länger als 15 Zeichen sein\n";
    		stringstream buffer;
    		cout<<"Gib mir einen int!"<<endl;
    		int i;
    		cin >> i;
    		buffer << i << ' ';
    		cout<<"Gib mir einen string (Leerzeichen werden durch _ ersetzt)!"<<endl;
    		string j;
    		cin.ignore(1,'\n');
    		getline(cin,j);
    		replace(j.begin(), j.end(), ' ', '_');
    		buffer << j << ' ';
    		cout<<"Gib mir einen double!"<<endl;
    		double k;
    		cin >> k;
    		buffer << k << ' ';
    		cout<<"Gib mir einen char!"<<endl;
    		char l;
    		cin >> l;
    		buffer << l;
    		cout<<endl;
    		neue_werte=buffer.str();	
    	} while (neue_werte.size()>18);
    	neue_werte.resize(18);
    	cout << "Folgendes wird in die andere Datei geschrieben:\n"
    		 << neue_werte << endl;
    
            /* Einlesen der exe */
    	string exe_datei;
    	{
    		ifstream exe("aufnehmer_prototyp.exe", ios::binary);
    		copy(istreambuf_iterator<char>(exe),istreambuf_iterator<char>(),back_inserter(exe_datei));
    	}
    
    	/* Ändern der Werte */
    	exe_datei.replace(exe_datei.find("XXXXXXXXXXXXXXXX"),18,neue_werte);
    
            /* Ausgabe der varänderten exe*/
    	{
    		ofstream exe("aufnehmer.exe", ios::binary);
    		copy(exe_datei.begin() ,exe_datei.end(),ostreambuf_iterator<char>(exe));
    	}
    
    }
    

    Viel Spaß mit der umständlichsten Variablenübergabe aller Zeiten! 🙄



  • @SeepJ Danke 😃
    Wie lange codest du schon mit C++?



  • Wofür brauchste das den??^^

    Trojaner Client starten Einstellungen machen auf Compilieren klicken.

    Server.exe wude erstellt und den Server spreaden ? xD

    Da will doch wohl keiner ein BÖSES Programm schreiben. ^^


Anmelden zum Antworten