Bonjour,
Tu as dû éditer la mémoire en dehors des zones qui correspondent aux sections de l'executable.
Supposons que dans ton fichier, il y ait une section .code qui commence en 0x400 et qui finit en 0x800, suivie d'une section .data entre 0x800 et 0x2000. La section .code est mappée en mémoire entre 0x401000 et 0x402000. Tu rajoutes ton code à la fin, et tu place la dernière instruction en 0x40142A. Du coup, quand ollydbg reconstruit l'executable, il ne sait pas où mettre ce qui dépasse. Dans le cas de la dernière instruction, l'adresse réelle (=du fichier) qui correspondrait à l'adresse virtuelle (=de la mémoire) serait 0x40142A - 0x401000 + 0x400 = 0x82A; mais 0x82A est déjà dans la section suivante (.data). Il faudrait allonger la section que tu as modifiée, donc déplacer toutes celles qui suivent, modifier les headers, etc.
L'exécution du code patché se déroule normalement, probablement parce que la section .code en mémoire est plus grande que la section du fichier (alignement). Si tu fait "copy to executable" sans toucher aux octets supplémentaires, ollydbg se contente de replacer dans le fichier les 0x400 premiers octets (dans mon exemple).
Je ne sais pas si je suis clair. Une bonne explication du format PE (en anglais) se trouve ici:
http://msdn.microsoft.com/en-us/magazine/cc301805.aspxvoir aussi les tutos d'Iczelion (
http://win32assembly.online.fr/tutorials.html ) qui ont été traduits en français.
De nombreux outils te permettent d'analyser ou manipuler les sections PE (lordPE, texe, filealyzer...)