Forum Programmation.c++ chargement de lib depuis la mémoire

Posté par  (site web personnel) .
Étiquettes : aucune
0
23
avr.
2007
Bonjour à tous !

Je suis en train de réaliser un petit programme basé sur une architecture de plugin. Pour le moment mon programme est capable de charger dynamiquement des .so avec le classique dlopen.
Ceci fonctionne parfaitement.

Mais je suis pour le moment limité car je ne charge les données que depuis des fichiers. Hors je souhaiterais pouvoir charger une lib depuis une zone mémoire (en fait j'utilise gsoap et des services web qui doivent me transmettre les libs par le net). Je reçois donc les libs dans un buffer mais je n'ai pas trouvé le moyen de la charger en tant que lib et je ne souhaite pas écrire sur le dur et charger le fichier (simplement car c'est dans le cas d'applications distribuées dont les libs proviennent uniquement du serveur)

Est-ce possible ? Et si oui comment ?

Merci d'avance pour toute aide !
  • # cramfs ?

    Posté par  . Évalué à 2.

    A mon souvenir il y a des appels système pour rendre une partie de la mémoire éxecutable, jme rapelle plus lesquels, et en plus tu va surement te prendre la tête à associer les adresses des fonctions de tes libs.

    Tu peux peut être essayer de faire un ramdisk : une partition en ram, tu pourras y écrire tes libs, et utiliser dlopen de la même manière que tu ne le fais maintenant

    un mini-howto :
    http://www.vanemery.com/Linux/Ramdisk/ramdisk.html
    • [^] # Re: pas cramfs

      Posté par  . Évalué à 2.

      euh jai titré cramfs, mais rien à voir en fait, sorry ;)
  • # mmap ?

    Posté par  (site web personnel) . Évalué à 2.

    tu fais un mmap avec les flags d'execution ?

    "La première sécurité est la liberté"

    • [^] # Re: mmap ?

      Posté par  (site web personnel) . Évalué à 2.

      La dessus il faut rajouter la gestion des adresses de bases dans le code et tout le
      boulot que fait dlopen.
      il y a aussi la gestion des dependances dynamiques...

      Amha la solution la plus simple et la plus propre est de stocker la libraire dans un
      dossier temporaire....
      • [^] # Re: mmap ?

        Posté par  (site web personnel) . Évalué à 2.

        oui, je pense que je vais me tourner vers l'écriture dans des temp (surtout que je tourne sous win et linux...)

        merci pour les solutions types mmap ou ramdisk mais elles ne sont pas envisageables. Je risque déjà d'avoir des problèmes lors de l'écriture de fichiers temporaires (mon code s'exécute dans un navigateur) alors monter des fichiers en ram ou autre... même pas la peine d'y penser ;)
  • # langage de script

    Posté par  (site web personnel) . Évalué à 1.

    Je sais que cela n'a rien a voir, mais cela ne serait il pas plus intéressant d'utiliser un langage de script ? Car c'est multiplateforme et aussi cela peut être sécurisé. Car ton so ou ta dll peuvent faire n'importe quoi sur ton système.

    Un langage de script léger et permettant de faire facilement une sandbox: lua http://lua.org

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.