Runprogram directement dans la mémoire
Runprogram directement dans la mémoire
Salut,
Je me demandai comment exécuter directement dans la mémoire un fichier inclus dans l'exe avec la commande includebinary ? (donc sans l'extraire et l'enregistrer sur le HD puis l'exécuter)
Je me demandai comment exécuter directement dans la mémoire un fichier inclus dans l'exe avec la commande includebinary ? (donc sans l'extraire et l'enregistrer sur le HD puis l'exécuter)
Je pense que le code est :
Paneric
Code : Tout sélectionner
!Jsr l_prg
end
Datasection
prg:
includebinary "monprg.exe"
enddatasection
Tu peux peut-être réserver une zone avec AllocateMemory(), puis créer ton fichier dans ce buffer!
Par contre, pour le lancer, je ne sais pas si ça peut fonctionner. J'ai pas testé, parce que j'arrive pas à utiliser IncludeFile avec un exe.
Ca plante à chaque fois, même en essayant de créer le fichier dans un répertoire.
J'ai fait ce code qui a l'air correct, le fichier est bien créé, la valeur retournée correspond bien à la taille réelle du fichier, et le fichier créé fonctionne parfaitement.
Mais j'ai un message d'erreur de Windows.
Quelqu'un peut-il le compiler et tester pour voir si c'est pareil chez vous.
J'ai PB 3.90
Chris
Par contre, pour le lancer, je ne sais pas si ça peut fonctionner. J'ai pas testé, parce que j'arrive pas à utiliser IncludeFile avec un exe.
Ca plante à chaque fois, même en essayant de créer le fichier dans un répertoire.
J'ai fait ce code qui a l'air correct, le fichier est bien créé, la valeur retournée correspond bien à la taille réelle du fichier, et le fichier créé fonctionne parfaitement.
Code : Tout sélectionner
If CreateFile(1, "Notepad.exe")
WriteData(?StartFile, ?EndFile - ?StartFile)
CloseFile(1)
EndIf
MessageRequester("Taille du fichier",Str(?EndFile-?StartFile)+" octets")
StartFile:
IncludeBinary "Notepad.exe"
EndFile:
Quelqu'un peut-il le compiler et tester pour voir si c'est pareil chez vous.
J'ai PB 3.90
Chris

heu j'y connais pas trop en assembleur mais sur pcPaneric a écrit :Je pense que le code est :
PanericCode : Tout sélectionner
!Jsr l_prg end Datasection prg: includebinary "monprg.exe" enddatasection
c'est pas la fonction CALL au lieu de JSR ???

-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
t'a essaye de faire comme paneric
mais avec un !call ala place de son !Jsr
comme ça
mais avec un !call ala place de son !Jsr
comme ça
Code : Tout sélectionner
!Call l_prg
end
Datasection
prg:
includebinary "monprg.exe"
enddatasection
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
je pense que le plus proche de ce que tu cherches est le thread.
sinon, je ne voit que copier l'exe qui est en include sur le disque dur pour l'exécuter puis l'effacer après
sinon, je ne voit que copier l'exe qui est en include sur le disque dur pour l'exécuter puis l'effacer après

Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Il y a peut-être une autre solution, c'est de créer un RamDisk, (un disque virtuel), mais comment ? : Aucune idée!
A mon avis, ça paraît bien compliqué pour, finalement, peu d'utilité
Le plus simple reste quand même de créer le fichier sur le disque, et de le supprimer quand il ne sert plus.
Un truc dans ce genre :
Chris 
A mon avis, ça paraît bien compliqué pour, finalement, peu d'utilité

Le plus simple reste quand même de créer le fichier sur le disque, et de le supprimer quand il ne sert plus.
Un truc dans ce genre :
Code : Tout sélectionner
;- Extrait le fichier à executer, et le recrée sur le disque
If CreateFile(1, "Notepad.exe")
WriteData(?StartFile, ?EndFile - ?StartFile)
CloseFile(1)
EndIf
;- Lance le fichier, et attends qu'il se termine
While RunProgram("Notepad.exe","","",1)<= 0 : Wend
;- Efface le fichier du disque, et termine
DeleteFile("Notepad.exe")
End
;- Le fichier à executer est inclus à la compilation
DataSection
StartFile:
IncludeBinary "Notepad.exe"
EndFile:
EndDataSection
