Page 1 sur 1
Lecture et écriture d'un fichier .EXE
Publié : mar. 22/sept./2015 20:04
par jambon
Bonjour je me demandais si il était possible et si il existait un exemple pour lire le contenu en byte d'un fichier .EXE et d'écrire ce contenu en sortie dans un nouveau .EXE ?
Je pense que avec WriteData et ReadData sa peut être possible mais ?
Re: Lecture et écriture d'un fichier .EXE
Publié : mar. 22/sept./2015 20:13
par G-Rom
Bien sur , tu as résumé les 2 fonctions qu'il te faut.
Re: Lecture et écriture d'un fichier .EXE
Publié : mar. 22/sept./2015 20:17
par falsam
Sujet presque traité dans deux autres topics. Un code exemple sans oublié la règle des 33% minimum (
Merci Denis & Nico)
Code : Tout sélectionner
Enumeration
#FileName
EndEnumeration
FileName.s = "TonFichier.exe"
;Lecture et mémorisation
If ReadFile(#FileName, FileName)
Length = Lof(#FileName)
*MemoryID = AllocateMemory(Length)
If *MemoryID
ReadData(#FileName, *MemoryID, Length)
*OutputBuffer=AllocateMemory(MemorySize(*MemoryID) * 1.35)
Base64Encoder(*MemoryID, MemorySize(*MemoryID), *OutputBuffer, MemorySize(*OutputBuffer))
EndIf
CloseFile(#FileName)
EndIf
;Ecriture
If CreateFile(#FileName, "test.exe")
WriteData(#FileName, *MemoryID, Length)
CloseFile(#FileName)
EndIf
Re: Lecture et écriture d'un fichier .EXE
Publié : mar. 22/sept./2015 20:32
par Patrick88
c'est quoi cette règle des 33% ?
pat
Re: Lecture et écriture d'un fichier .EXE
Publié : mar. 22/sept./2015 20:48
par falsam
Patrick88 a écrit :c'est quoi cette règle des 33% ?
Il y a quelques jours j'ai eu pas mal de souci de crash aléatoire dans un code lors de l’exécution de Base64Decoder() conjointement avec AllocateMemory().
L'aide consacré à Base64Decoder() recommande de faire un tampon légèrement plus grand, par exemple 30%, pour éviter les débordements.
Quand je sais que je vais utiliser
Base64Decoder(), l'alloue systématiquement 35% de plus à la zone mémoire contigüe.
Re: Lecture et écriture d'un fichier .EXE
Publié : mar. 22/sept./2015 21:08
par G-Rom
Tu n'est pas obligé de passé par le base64encoder()
Code : Tout sélectionner
FileName.s = "01.exe"
File = ReadFile(#PB_Any,FileName)
*buffer = AllocateMemory(Lof(File))
ReadData(File,*buffer,Lof(File))
CloseFile(File)
File = CreateFile(#PB_Any,"out.exe")
WriteData(File,*buffer,MemorySize(*buffer))