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

 C Discussion :

réplication du code d'une fonction à l'éxecution, est ce possible ?


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 27
    Points : 22
    Points
    22
    Par défaut réplication du code d'une fonction à l'éxecution, est ce possible ?
    Bjr,
    Par souci d'économie mémoire à l'exécution du prg principal, je souhaite répliquer le code de certaines fonctions définies dans une dll d'initialisation du prg principal, vers une structure de données adéquate fournie à la dll via pointeur... la dll étant déchargée de la mémoire une fois l'initialisation terminée.

    1) je ne suis pas sûr que cela soit faisable ...
    2) Si ça l'est comment faut--il faire ... " ... ( void*) malloc( sizeof( ma_fonction))" + "memcpy ..." ?
    3) l'environnement est microsoft, l'usage d'API adéquates est envisageable dans le mesure sous réserve que la vitesse d'exécution des fonctions répliquées (à l'appel, notamment) ne soit pas (trop) pénalisant.
    Merci de votre attention.
    A+

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 27
    Points : 22
    Points
    22
    Par défaut
    Slt,

    Pour la première fois sur ce site, c'est moi qui me réponds ...

    Auto-réponse pour les curieux (concerne seulement la réplication, pas l'aspect dll ...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    include <windows.h>
    #include <stdio.h>
     
    typedef int (*foo_ptr)(void);
     
    static int foo()
    {
    // this is the only modification
    printf("test to print");
    return 20;
    }
     
    static void after_foo(){}
     
    void main(int argc, char **argv)
    {
    size_t foo_size = (LPBYTE)after_foo - (LPBYTE)foo;
     
    foo_ptr p_foo = (foo_ptr) VirtualAlloc(0, foo_size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    CopyMemory(p_foo, &foo, foo_size);
     
    int res = (*p_foo)();
    }
    Attention, cela ne fonctionne qu'en mode Release, pas Debug.

    Pour les + curieux des curieux, l'origine de ce code : http://www.cplusplus.com/forum/windows/16004/

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 05/02/2008, 13h10
  2. Réponses: 3
    Dernier message: 29/01/2008, 12h04
  3. remplacer du code par une fonction
    Par bullrot dans le forum C++Builder
    Réponses: 6
    Dernier message: 21/11/2007, 12h08
  4. [Tableaux] demande de code pour une fonction.php
    Par carmen256 dans le forum Langage
    Réponses: 4
    Dernier message: 21/01/2006, 17h22
  5. optimiser le code d'une fonction
    Par yanis97 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/07/2005, 08h41

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