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 :

Chargement dynamique de code


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 149
    Par défaut Chargement dynamique de code
    Bonjour,
    Voila j'ai un projet de C à faire qui consiste en une gestion de la mémoire.

    Celui ci touche à sa fin, mais une derniere partie consiste à "charger dynamiquement le code pour l'appliquer à des programmes déja compilés".

    Quelqu'un pourrait me dire comment faire cela?

    Merci

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Quel systeme?

    Tu veux une genre de dll en gros c'est ca?

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 149
    Par défaut
    Sur Linux...

    Bah je ne sais pas trop en fait.
    C'est l'énoncé du projet et j'ai juste ça comme infos...

    Il me semble que je dois trouver un moyen pour qu'un programme comme celui ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include <stdlib.h>
    int main() {
    int *p;
    p = (int*) malloc(4);
    return 0;
    }
    SI le programme a déjà été compilé, celui ci doit tout de meme faire un appel à la fonction malloc de ma bibliotheque et non à la fonction malloc de stdlib...

    Tu vois?

  4. #4
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Sous linux c'est pas des dll mais des .so
    Par contre chais pas comment ça marche

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 149
    Par défaut
    Moi non plus hélas lol

    Mais j'aimerai bien savoir.

    Merci pour l'info .so je vais continuer à chercher....

    Si quelqu'un sait, ou a un lien, je suis preneur

  6. #6
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    Citation Envoyé par Ylias
    Moi non plus hélas lol

    Mais j'aimerai bien savoir.

    Merci pour l'info .so je vais continuer à chercher....

    Si quelqu'un sait, ou a un lien, je suis preneur
    Sous Linux avec bash pour utiliser un malloc de ta sauce a la place du malloc standard, tu peux faire comme ca.

    Supposons que tu ai un fichier malloc.c, un free.c, un realloc.c, et un calloc.c.
    (il vaut mieux toutes les refaires des fois qu'un programme en appelle une ou l'autre.).

    1_ Tu compiles ta librairie dynamique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc -o mymalloc.so -shared *.c
    Sans oublier les options de compilation (-W -Wall -pedantic -ansi) mais la c'est pour l'exemple.

    2_ Tu precise au systeme ou aller chercher les fonctions.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    export LD_PRELOAD /home/toi/prog/c/mymalloc.so
    Attention.

    Ce type de manipulation est completement dependante du systeme sur lequel tu travailles.
    Et la commande a utiliser depend de ton shell.
    Donc il faut que tu cherches comment preloader une librairie dynamique sur ton systeme.

    Tu es sur un linux, avec un shell de ton choix, donc la manipulation ne sera pas la meme.

    Voici un exemple sur linux avec bash, qui illustre le principe :

    Deux fichiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $ cat fork.c
    unsigned int    fork()
    {
      return(0);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $ cat test.c
    #include <stdio.h>
    #include <stdlib.h>
     
    int             main(int argc, char **argv)
    {
      unsigned int result;
     
      result = fork();
      printf("fork a renvoye %d\n", result);
      return (EXIT_SUCCESS);
    }
    Normalement le programme fait ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     ~/c/dvp$ gcc -o test test.c
     ~/c/dvp$ ./test
    fork a renvoye 25646
    fork a renvoye 0
    Je remplace fork par le mien, parce que je trouve plus sexy:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     ~/c/dvp$ gcc -shared -o fork.so fork.c
     ~/c/dvp$ export LD_PRELOAD='/home/jack/prog/c/dvp/fork.so
     ~/c/dvp$ ./test
    fork a renvoye 0
    Voila pour l'exemple.

    Apres il faut te documenter sur ton systeme. Pour savoir quelle variable d'envirronement il faut changer, et comment.
    Tu defini une variable avec export sous bash, avec setenv sous csh et affillies, etc...

    les variables peuvent changer de nom: LD_PRELOAD est le plus repandu mais il en existe d'autres. (_RLD_LIST, ...)

    Bonne chance.

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Ylias
    Voila j'ai un projet de C à faire qui consiste en une gestion de la mémoire.

    Celui ci touche à sa fin, mais une derniere partie consiste à "charger dynamiquement le code pour l'appliquer à des programmes déja compilés".

    Quelqu'un pourrait me dire comment faire cela?
    On ne peut pas faire ça en C standard. Il faut invoquer le 'loader' qui est une fonction de ton système.

    Détails sur le forum consacré à ton système. Rien à voir avec le langage C.

Discussions similaires

  1. Chargement dynamique de code
    Par pouic06 dans le forum jQuery
    Réponses: 1
    Dernier message: 11/12/2013, 11h37
  2. [jar]chargement dynamique.
    Par Teddy-htk dans le forum API standards et tierces
    Réponses: 10
    Dernier message: 27/04/2006, 15h19
  3. Problème mémoire avec une dll par chargement dynamique
    Par widze19 dans le forum C++Builder
    Réponses: 6
    Dernier message: 15/12/2003, 13h20
  4. Dll a chargement dynamique
    Par delire8 dans le forum C++Builder
    Réponses: 7
    Dernier message: 05/06/2003, 22h47
  5. Chargement dynamique de DLL sous Unix
    Par Willou dans le forum Autres éditeurs
    Réponses: 7
    Dernier message: 18/12/2002, 18h25

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