Exécuter code présent dans un txt

Résolu
sylvain09 Messages postés 34 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 10 mars 2007 - 26 déc. 2006 à 19:27
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 - 26 déc. 2006 à 22:57
Salut,

Développant une application j'ai besoin d'exécuter du code présent dans un txt externe.
J'ouvre le txt dans un RichTextBox, tout va bien.

Mais comment faire pour Vb 2003 reconnaisse le contenu du texte comme du code et l'exécute ?

Merci de votre aide

Sylvain3665

27 réponses

Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
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...

Joyeux noël !

Julien.
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 déc. 2006 à 20:36
ah mais tu es dur...
Ton script VB passe dans un compilo VB, il ne reste pas en texte.

ciao...
BruNews, MVP VC++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 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.

ciao...
BruNews, MVP VC++
0
sylvain09 Messages postés 34 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 10 mars 2007
26 déc. 2006 à 20:25
Euh,

C'est possible d'expliquer en plus simple ?
J'ai rien compris ^^

merci quand même
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 déc. 2006 à 20:30
Tout à fait normal au vu de ta question.
Si tu apprenais à coder (C et ASM) avant la scriptologie, tu te rendrais compte de l'ineptie de ta demande.

ciao...
BruNews, MVP VC++
0
sylvain09 Messages postés 34 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 10 mars 2007
26 déc. 2006 à 20:34
Or le code présent dans le txt est du code Visual Basic ! par du C ou Assembleur !
Il est pas possible d'utiliser le texte comme des commandes en vb ?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 déc. 2006 à 20:34
un CPU ne travaille qu'en binaire et non en hexa.

ciao...
BruNews, MVP VC++
0
sylvain09 Messages postés 34 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 10 mars 2007
26 déc. 2006 à 20:40
Ok je crois avoir compris...

Donc va falloir que je trouve une autre solution ^^
Car faire un compilo vb c'est pas mon truc !

Merci
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
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 ?
0
sylvain09 Messages postés 34 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 10 mars 2007
26 déc. 2006 à 20:49
Mon post ==> txt contenant du code

Il n'a pas à écrire du code, c'est déjà fait :)
Après je savais pas qu'il fallait obligatoirement le compiler...
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
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 !!!).
0
sylvain09 Messages postés 34 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 10 mars 2007
26 déc. 2006 à 21:04
Oki j'ai compris merci ;)
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
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. 
0
sylvain09 Messages postés 34 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 10 mars 2007
26 déc. 2006 à 21:46
Oui mais quelle dll ?
ça m'interesse ça :)
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
26 déc. 2006 à 21:53
Ce sera n'importe quoi sauf du code VB écrit dans un fichier texte !
C'est tellement évident !
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
26 déc. 2006 à 21:58
Rien ne lui interdira, par contre, d'écrire par exemple un batch et de l'exécuter, ma foi, mais un batch n'est pas du VB.
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
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)

Execute (EbExecuteLine(StrPtr(CodeLine), 0&, 0&, Abs(CheckOnly)) 0)

End Function

Public Sub Main()

' Exécute : MsgBox "Ceci est un test"
Call Execute("MsgBox ""Ceci est un test""")
' Exécute : Number1 = 1024
Call Execute("Number" & 1 & " = 1024")
' Exécute : Number2 = Number1 + 1024
Call Execute("Number" & 2 & " = Number" & 1 & " + 1024")
' Affiche la somme de Number1 et Number2 (soit 3072)
MsgBox Number1 + Number2

End Sub

Julien.
0
sylvain09 Messages postés 34 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 10 mars 2007
26 déc. 2006 à 22:19
Merci pour les codes, mais j'ai bien précisé que j'était sous vb 2003...
Donc vb6.dll, ça va pas ^^

Ensuite, pour la deuxième solution, je ne veux pas que le code soit public dans une page html...
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
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

_______________________

Omnia vincit labor improbus
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
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...

Julien.
0
Rejoignez-nous