Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 26 déc. 2006 à 20:28
J'imagine que ce que tu veux faire est d'exécuter du code vb non ?
Pour ca, pas de miracles, tu dois faire un compilateur :p (En gros, à moins d'être très motivé, n'essaye pas)
Sinon BruNews t'explique ce que tu dois faire pour exécuter un bout de code d'assembleur... Les opcodes étants la traduction en hex des commandes d'assembleurs...
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 26 déc. 2006 à 20:22
Faire un VirtualAlloc avec le flag PAGE_EXECUTE_READWRITE.
Tu écris dedans les opcodes (voir manuels Intel) correspondant au code écrit dans le textbox en n'oubliant pas d'y ajouter un équivalent "ret 0" pour replacer le registre EIP.
Quand fini, tu fais un call sur adresse retournée par VirtualAlloc.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 26 déc. 2006 à 20:44
Et si j'écris "trouve moi le plus grand nombre premier d'une précision de 1024 bits", tu crois qu'il peut m'écrire tout le code à ma place et me l'optimiser afin de calculer un nombre premier d'une précision de 1024 bits ?
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 26 déc. 2006 à 21:01
Je sais bien, mais c'était pour te faire remarquer, d'une façon ironique, qu'un texte, qu'il soit écrit en français, ou en vb, est incompréhensible pour une machine : elle ne sais lire que du langage machine elle, donc sans interprêteur de code, ou sans compilateur, ce que tu cherche à faire est irréalisable. (surtout si le code exécuté doit en plus tenir compte de l'environnement du programme qui lance le script, comme la modification de variable de ton programme appelant par exemple !!!).
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 26 déc. 2006 à 21:39
A ma connaissance on peut faire ça facilement en WinDev avec la fonction compile("code source", fonctionPTR) à l'exécution grace à une dll.
Cela doit exister en VB car tout ce que fait WinDev, VB peut le faire.
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 26 déc. 2006 à 22:15
Je vois quand même 2 demi-solutions,
La première :
Tu as dans vb6.dll la fonction EbExecuteLine qui te permet d'exécuter UNE ligne, je n'ai jamais énormément testé, mais bon, ca peut peut-être t'aider... Je te colle un exemple d'utilisation à la fin. Mais fais attention que je ne pense pas que vb6.dll soit redistribuable...
La seconde :
Transforme ton fichier texte en une page html contenant ton code en vbscript et remplace ta richtextbox en WebBrowser pour pouvoir l'interprèter... J'ai déjà utiliser cette solution, et c'est peu performant. (Je sais pas ce qu'en pense les pros du forum ?)
Voici l'exemple de EbExecuteLine :
Option Explicit
Public Number1 As Long
Public Number2 As Long
Private Declare Function EbExecuteLine _
Lib "vba6.dll" _
( _
ByVal pStringToExec As Long, _
ByVal Foo1 As Long, _
ByVal Foo2 As Long, _
ByVal fCheckOnly As Long _
) As Long
Public Function Execute(CodeLine As String, Optional CheckOnly As Boolean = False)
Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 26 déc. 2006 à 22:22
Bon les gens je ne suis pas aussi radical que vous ...
Il se trouve que la question initiale laissait entendre qu'il y avait une fonction bidon genre popen lol , mais à mon avis c'est faisable.
Crade, pas portable ( bintiens, VB ), compliquée, lente, mais FAISABLE.
( en C, du moins , le VB je connais pas )
Selon MS, il y a un compilo dispo en ligne de commande pour le VB, vbc.exe.
Rien n'empêcherait d'enregistrer le contenu du fichier sur le disque et de lancer le compilo avec ça ( plus propre, mais je sais pas si c'st faisable sous Win, faire un pipe ) , récupérer le fichier de sortie ( sur stdout si possible ) ...à ce moment on pourrait avoir le bytecode.
Maintenant, je ne sais pas comment sont organisés les .exe écrits en VB, il doit y avoir le header PE, puis un loader, puis le bytecode, et le loader charge le code en mémoire et demande à la virtual machine d'exec le code.
Donc si t'arrives à trouver quelle partie de l'exe correspond à ce loader ( ou l'écrire toi même en faisant appel à VB6FR.dll , à la limite ça serait moins gore ) ... tu pourrais éventuellement, potentiellement, peut-etre , hypotétiquement ... le faire.
Quoi qu'il en soit, ce n'est certainement pas une réponse adaptée vu la question, ça nécéssiterait bien trop de bidouille technique et de connaissances que notre ami ne semble pas posséder :)
Sur ce, bonnes vacances ( n'est-ce pas brunews )
++
Arnaud
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 26 déc. 2006 à 22:23
?? que le code soit public ??
Faire une page html ne veut pas dire la mettre en ligne, il s'agit de créer un simple fichier .htm, il n'a rien de plus publique qu'un fichier texte...