Bonjour à tous,

Je souhaite faire un petit programme permettant de patcher un fichier EXE en mode binaire. Le programme consiste à remplacer une section de code en plein milieu d'un exécutable.

Le fonctionnement est assez simple.

1) Je crée un nouveau fichier vide, je lis les x premiers bytes de mon fichier EXE, je les écris dans mon nouveau fichiers.

2) Je lis ensuite la totalité d'un fichier binaire que j'écris à la suite de mon nouveau fichier. ( il s'agit du nouveau code à patcher).

3) Enfin, dernière étape, je lis la "fin" du fichier, et je la réécris à la fin de mon nouveau fichier.

Ai-je déjà bien expliqué la chose ?

Mon problème se situe à la troisième étape :

Mon fichier EXE fait une taille de : 11 248 640 bytes
La première section que j'écris dans le nouveau fichier est de : 2 523 936 bytes
La seconde section correspond au patch que j'écris est de : 3 991 822 bytes

la troisième partie ( fin du fichier à écrire ) est de :

Taille totale du fichier - (Code de début + Code à patcher)
11 248 640 - (2 523 936 + 3 991 822) = 4 732 882

Je vais donc devoir écrire 4 732 882 bytes

Pour ré-écrire donc la fin, j'utilise la méthode :

binaryreader.read(tableau de byte d'un taille de 4 732 882 bytes,(2 523 936 + 3 991 822), 4 732 882)

Mon problème est que ce "read" provoque une exception :

Interception de System.ArgumentException
Message=L'offset et la longueur étaient hors limites pour ce tableau ou bien le nombre est supérieur au nombre d'éléments de l'index à la fin de la collection source.
Source=mscorlib
StackTrace:
à System.IO.BinaryReader.Read(Byte[] buffer, Int32 index, Int32 count)
à PatcherFichier.Form1.button1_Click(Object sender, EventArgs e) dans c:\users\XXXXX\documents\visual studio 2010\Projects\PatcherFichier\PatcherFichier\Form1.cs:ligne 51
InnerException:
J'ai débuggé, tourné dans mon code,etc... je bloque vraiment.

je me permet d'uploader mon petit projet de Test Visual Studio, si quelqu'un pouvait me débloquer ou me donner des pistes, ce serait fort appréciable

http://dl.free.fr/nOMs8yUny

N'hésitez pas pour toutes questions

Cordialement,

Nixeus