Frage

Ich habe eine ausführbare Befehlszeile, die einige Bits in einer Datei ändert, die ich von meinem Programm verwenden möchten. Ist es möglich, meine eigene ausführbare Datei zu erstellen, die dieses Tool verwendet und verteilen nur eine ausführbare Datei?

[Bearbeiten] Zur Verdeutlichung:

Das Kommandozeilen-Tool nimmt ein Offset-und einige Bits und ändert die Bits auf diesem in einer bestimmten Datei versetzt. Deshalb möchte ich einen Patcher für eine Anwendung erstellen, die bestimmte Bits auf einen bestimmten Wert ändert, so was ich tun kann ich so etwas wie eine Batchdatei schreiben, es zu tun, aber ich möchte eine ausführbare Datei erstellen, die es funktioniert, dh einbetten das Werkzeug in ein Wrapper-Programm, das es mit bestimmten Werten aufruft.

Ich kann in (Fenster) -Code Wrapper c \ c ++, asm aber keine .net bitte.

War es hilfreich?

Lösung

Es wäre einfacher, eine eigene Implementierung dieses Programms zu rollen, als die Hülle zu schreiben; es klingt wie es trivial ist -. nur die Datei öffnen, an die richtige Stelle suchen, schreiben Sie Ihre Bits, schließen Sie die Datei, sind Sie fertig

Andere Tipps

Der einfachste Weg ist es, diese exe in Ihre eigenen einzubetten und schreiben Sie es auf der Festplatte, um sie auszuführen.

Sie können die ausführbare Datei als Binär-Stream-Ressource in der ausführbaren Datei hinzufügen, und wenn Sie es möchten, können Sie es in einem temporären Ordner extrahieren und neuen Prozess mit der temporären Datei erstellen.

Der genaue Code, den Sie müssen dies tun, hängt davon ab, ob Sie .NET oder C ++ Code schreiben.

Kurze Antwort: Nr.

Weniger kurze Antwort. Es sei denn, es ist ein Installateur oder ein selbstextrahierendes Archiv executeable

Längerer, spekulative Antwort: Wenn das Dateisystem alternative Datenströme unterstützt, könnten Sie möglicherweise einen Strom fügen Sie das Dienstprogramm zu Ihrem Programm enthält, dann könnte Ihr Programm zugreifen einen eigenen alternativen Datenstrom ist, Extrahieren der Nutzen, wenn Sie es brauchen. Ahaha.

Sie könnten das eine ausführbare Datei auf das Ende des anderen angehängt und einige Code schreiben Sie es in einen temporären Ordner zu entpacken.

Ich habe eine ähnliche Sache vorher getan, aber mit einer Konfigurationsdatei und einige Bitmaps in eine EXE-Datei in Windows angehängt. Die Art, wie ich es tat, war, zunächst meine Sachen auf das Ende der EXE-Datei anhängen und dann ein wenig Struktur danach schreiben, die die Datei der Offset-Daten enthält, die in Ihrem Fall den Versatz des zweiten exe würde.

Wenn Ihre App ausgeführt wird, versuchen, das Ende der Datei minus der Größe der Struktur, extrahieren Sie die Offset-Datei und kopieren Sie die zweite exe in einen temporären Ordner, dann starten Sie es.

OK, hier ist ein wenig mehr Details als requestd. Dies ist einiger Pseudo-Code der kombinierte EXE zu erstellen. Dies ist ein kleines Dienstprogramm, das Sie ausführen, nachdem Ihre Haupt EXE kompilieren:

Open destination file
Open main exe as a binary file
Copy main exe to destination file
offset = size of main exe
Open 2nd exe as a binary file
Copy 2nd exe to the output file
Write the offset to the output file

Jetzt für das Extraktionsverfahren. Dies geht in der Haupt EXE:

Find the location of our own EXE file (GetModuleFileName() under Windows)
Open the file in binary mode
Seek to the end minus sizeof(offset) (typically 4 bytes)
Read the offset value
Seek to the offset position
Open a temporary file in binary mode
Read bytes from the main EXE and write to the temporary file
Launch the temporary file

Ich denke, der einfachste Weg, dies für Ihre Zwecke zu tun, wahrscheinlich eine selbstextrahierende ausführbare Paket zu verwenden ist. Verwenden Sie zum Beispiel ein Tool wie Paquet Builder denen die exe-Paket (und andere Dateien, die Sie wollen) und können die exe aufrufen oder eine Batch-Datei oder was auch immer Sie wollen, wenn der Benutzer entpackt die ausführbare selbstextrahier konfiguriert werden.

Wenn die exe gebaut wurde relocatable zu sein (essentiall Linker-Flag / fixed: nein), können Sie eine Loadlibrary auf es tatsächlich tun, bekommen die Basisadresse, setzen Sie einen Anruf Kette und Anruf (Sprung) in ihn. Es wäre nicht die Mühe wert sein, und nur sehr wenige exe diese Weise gebaut werden, so dass Sie den Code haben müßten, um es wieder aufzubauen, an welcher Stellt SieFormal nicht in dieser Übung sein würde.

So ... Nein.

Ich bin mehr intrigiert durch den Entwickler, der nicht in C / C ++ / asm Schreiben hat nichts dagegen, aber ‚nicht .net‘ - aber anscheinend stymied von fopen / fseek / fwrite - denn das ist über das ganze Programm, das Sie beschreiben klingt wie es tut.

Ich denke, dies durch den Einsatz auch möglich ist, AutoIt der Fileinstall-Funktion . Dazu werden Sie zum Einrichten AutoIt haben, ein Skript mit dem Fileinstall-Funktion erstellen, die die exe aufzunehmen und verwenden Sie dann F. I. die Funktion RunWait , um sie auszuführen. Kompilieren zu einer exe und Sie sollen durchgeführt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top