IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Framework .NET Discussion :

Injection de MSIL au runtime


Sujet :

Framework .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut Injection de MSIL au runtime


    J'ai une fonction qui ressemble un peut à ça :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public virtual void SayHello(string name)
    {
      byte[] code = ...
    }
    Dedans, code c'est le corps d'une fonction de la même classe avec la même signature (juste le nom qui change à priori) :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public virtual void Hello(string name)
    {
     Console.WriteLine(String.Format("Bonjour {0} !",name));
    }
    et donc code contient le code MSIL de :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    Console.WriteLine(String.Format("Bonjour {0} !",name));
    Donc directement du "bytecode".

    Puis-je exécuter le code dans le contexte de SayHello, comme si j'avais mis la ligne "Console.WriteLine" dans SayHello ? J'ai pensé à utiliser DynamicMethod mais a priori avec on ne peut générer que des méthodes statiques (je veux pouvoir accéder à partir de mon code IL aux membres d'instances de la classe qui contient SayHello, et que la référence à This dans ce dernier soit bien la classe qui contient SayHello). J'ai regardé MethodRental aussi mais ça ne marche que sur les types générés dynamiquement. Comment puis-je alors faire ?

  2. #2
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    PostSharp ?

  3. #3
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Que je sache postsharp c'est de la post-compilation non ? il modifie la dll une fois compilée et ensuite c'est cette dll qu'on exécute ... moi je suis dans le cas où j'ai déjà tout chargé et que je veux exécuter en live du code msil (ou plutôt du bytecode IL) dans le contexte de la méthode actuelle ...

  4. #4
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    http://www.postsharp.org/aop.net/runtime-weaving/

    Tiens, sinon, simple curiosité : pourquoi du bytecode msil ?

  5. #5
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Je vois pas comment m'en servir pour faire ce que je veux ...

    Pourquoi ? délire ...
    Je m'amuse à extraire le code d'une méthode via la réflection, j'ai donc un byte[] qui contient le code de la fonction. Et je veux l'exécuter dans une autre méthode mais qui es dans la même assembly et qui a les mêmes paramètres ... et j'y arrive pas.
    En C/C++ cela reviendrais à exécuter directement du code x86 stocké dans un pointeur, et je veux faire pareil mais avec de l'IL ...

  6. #6
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    Oui, mais je vois pas pourquoi du bytecode msil, et pas un délégué, par exemple.

Discussions similaires

  1. Injection d'opcodes au runtime
    Par az0101 dans le forum Contribuez
    Réponses: 4
    Dernier message: 11/05/2010, 19h56
  2. [TP]Runtime error 106 à l'exécution
    Par BlackTiger dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 25/01/2004, 21h50
  3. [LG]runtime error 202
    Par picsou123 dans le forum Langage
    Réponses: 2
    Dernier message: 14/11/2003, 22h53
  4. Runtime VC++ ou MFC
    Par Elodie_nl dans le forum MFC
    Réponses: 9
    Dernier message: 03/12/2002, 17h23
  5. [Kylix] Runtime error 230 avec INDY
    Par Anonymous dans le forum EDI
    Réponses: 2
    Dernier message: 23/03/2002, 11h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo