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.

Code : Tout sélectionner

*OutputBuffer=AllocateMemory(MemorySize(*MemoryID) * 1.35)

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))