Runprogram directement dans la mémoire

Sujets variés concernant le développement en PureBasic
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Runprogram directement dans la mémoire

Message par julien »

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)
Paneric
Messages : 66
Inscription : dim. 25/janv./2004 19:03
Contact :

Message par Paneric »

Je pense que le code est :

Code : Tout sélectionner

!Jsr l_prg

end

Datasection
prg:
includebinary "monprg.exe"
enddatasection
Paneric
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

Erreur -> Error Illegal instruction [78]
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

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.

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:
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 :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Paneric a écrit :Je pense que le code est :

Code : Tout sélectionner

!Jsr l_prg

end

Datasection
prg:
includebinary "monprg.exe"
enddatasection
Paneric
heu j'y connais pas trop en assembleur mais sur pc
c'est pas la fonction CALL au lieu de JSR ???
8O
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

ok ça fonctionne mais le fichier est céér sur le disque dur...
Mais pour l'exécuter directement en mémoire sans ecrire le fichier sur le disque dur.... je ne sais pas comment faire... peut être voir dans les API avec la commande CreateProcess_() qui peut être une piste
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

quel est l'intéret de la chose ? :roll:
j'arrive pas à voir à quoi cela pourrait servir. il y a peut-être une autre solution... :D
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)]
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

A apprendre, et a exécuter un exe comprésser directement dans la mémoire sans accés au disque dur.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

à OK, je cherche trop compliqué :oops:
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)]
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

j'ai sufer sur plusieur forum (vbfrance...) et la question est souvent abordé mais reste sans réponse... :(
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

t'a essaye de faire comme paneric

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 
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

Dobro a écrit :t'a essaye de faire comme paneric
Oui est ça donne rien, c'est pas l'équivalent d'un goto en PB ?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ben plutot a un "gosub"

en pure :

gosub titi

titi:
jjjj
jjjj
jjjj
return

en assembleur

call nom_de_ la_ procedure


nom_de_ la_ procedure Proc NEAR
jjjj
jjjj
jjjj
nom_de_ la_ procedure Proc ENDP


enfin je crois :)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

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 :?
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)]
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

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 :

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
Chris :)
Répondre