Question

J'ai un exécutable en ligne de commande qui modifie certains bits d'un fichier que je souhaite utiliser depuis mon programme. Est-il possible de créer mon propre exécutable utilisant cet outil et de ne distribuer qu'un seul exécutable?

[modifier] Clarification:

L'outil de ligne de commande prend un offset et quelques bits et modifie les bits à cet offset dans un fichier donné. Donc, je veux créer un patcher pour une application qui modifie des bits spécifiques en une valeur spécifique, donc ce que je peux faire, j’écris quelque chose comme un fichier de commandes, mais je veux créer un exécutable qui le fait, c’est-à-dire incorporer l’outil dans un programme wrapper qui l'appelle avec des valeurs spécifiques.

Je peux coder le wrapper dans (Windows) c \ c ++, asm mais pas .net s'il vous plaît.

Était-ce utile?

La solution

Il serait plus facile de lancer votre propre implémentation de ce programme que d’écrire le wrapper; cela semble trivial: il suffit d'ouvrir le fichier, de rechercher le bon emplacement, d'écrire vos bits, de fermer le fichier, vous avez terminé.

Autres conseils

Le moyen le plus simple est d'intégrer ce fichier exe dans le vôtre et de l'écrire sur le disque pour l'exécuter.

Vous pouvez ajouter l'exécutable en tant que ressource de flux binaire dans votre exécutable et, lorsque vous en avez besoin, vous pouvez l'extraire dans un dossier temporaire et créer un nouveau processus avec le fichier temporaire.

Le code exact à utiliser dépend de la manière dont vous écrivez du code .Net ou C ++.

Réponse courte: non.

Réponse plus courte: sauf s'il s'agit d'un programme d'installation ou d'une archive auto-extractible exécutable.

Réponse plus longue et spéculative: si le système de fichiers prend en charge d'autres flux de données, vous pouvez éventuellement ajouter un flux contenant l'utilitaire à votre programme. Votre programme pourra alors accéder à son propre flux de données alternatif et extraire l'utilitaire lorsque vous en aurez besoin. Ahaha.

Vous pouvez ajouter l'un des exécutables à la fin de l'autre et écrire du code pour le décompresser dans un dossier temporaire.

J'ai déjà fait la même chose, mais avec un fichier de configuration et des bitmaps ajoutés à un fichier EXE dans Windows. Je l’ai fait en ajoutant d’abord mes fichiers à la fin du fichier EXE, puis en écrivant un peu après celui contenant le décalage de fichier des données, qui dans votre cas correspondrait au décalage du 2e fichier exe.

Lorsque vous exécutez votre application, recherchez la fin du fichier moins la taille de la structure, extrayez le fichier offset, copiez le deuxième fichier exe dans un dossier temporaire, puis lancez-le.

OK, voici un peu plus de détails en tant que requestd. Ceci est un pseudo-code pour créer le fichier EXE combiné. C’est un petit utilitaire que vous exécutez après avoir compilé votre fichier EXE principal:

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

Maintenant pour la procédure d’extraction. Cela va dans votre EXE principal:

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

Je pense que le moyen le plus simple de le faire pour vos besoins est probablement d’utiliser un package exécutable à extraction automatique. Par exemple, utilisez un outil du type Paquet Builder qui conditionnera le fichier exe. fichiers que vous souhaitez) et peuvent être configurés pour appeler le fichier exe, un fichier de commandes ou tout autre chose de votre choix lorsque l'utilisateur décompresse l'exécutable à extraction automatique.

Si le fichier exe a été conçu pour être déplaçable (indicateur de l'éditeur de liens essentiel / corrigé: non), vous pouvez en fait faire une LoadLibrary sur celle-ci, obtenir l'adresse de base, configurer une chaîne d'appels et y appeler (sauter). Cela ne vaudrait pas la peine, et très peu d'exécutifs sont construits de cette façon, il vous faudrait donc le code pour le reconstruire, ce qui vous éviterait de participer à cet exercice.

Alors ... non.

Je suis plus intrigué par le développeur qui ne craint pas l’écriture en C / C ++ / asm, mais 'not. Net' - mais qui est apparemment bloqué par fopen / fseek / fwrite - car c’est à peu près tout le programme que vous décrivez. ça sonne comme ça.

Je pense que cela est également possible en utilisant la la fonction FileInstall d'AutoIt . . Pour cela, vous devrez configurer AutoIt, créer un script avec la fonction FileInstall pour inclure le fichier exe, puis utiliser f.i. la la fonction RunWait pour les exécuter. Compilez sur un exe et vous devriez avoir terminé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top