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 :

[Insoluble] Allocation mémoire pour gen dynamique de code


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut [Insoluble] Allocation mémoire pour gen dynamique de code
    Voilà j'ai besoin d'appeller des fonctions d'une DLL quelconque (qui peut changer à l'exécution). Grand pb. s'il en est.

    Donc mon idée est d'allouer à l'exécution une zone mémoire exécutable
    et d'y écrire (à la brutos) les prologues & épilogues ASM (en utilisant un pointeur byte).

    En gros, je veux m'affranchir de générer du byte code dans un fichier, faire une édition de lien, lancer un autre exécutable.

    Est-ce que ma méthode est viable ? Est-ce que l'on peut faire mieux ? Est-ce que je risque des "General Protection Fault" (comment rendre mon code plus sur ?).

    Est-ce que cela posera des pbs. avec des technos plus évoluées comme C++ mangling, COM+, exceptions (C++, structurées), ... Quand est-il des calling conventions, ... ?

    A noter que j'ai sous la main une modélisation des prototypes des fonctions de la DLL (dont je connais le nb. de params, ref & value passing, types, ...).

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Je connais très mal le sujet, mais je sais qu'il existe des fonctions toutes faites spécifiques à chaque plateforme pour appeler des dll à chaud. Il y a un ou deux tutos sur le site pour linux je crois, et pour windows ça ne doit pas être immensément difficile à trouver. Ca m'a l'air bien plus simple que ce que tu veux faire, ou alors j'ai mal compris.

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Il suffit de charger ta DLL ou autre dynamiquement et puis voilà...

    Sous linux ça serait dlopen/dlsym etc.

  4. #4
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Bon c'est surement que je n'était pas assez clair.

    Le nom de la DLL n'est connu qu'à l'exécution.
    Le nom de la fonction à appeller n'est connu qu'à l'exécution.
    Le nombre de paramètres d'appel n'est connu qu'à l'exécution.
    Le type des paramètres ...
    Le type de passage des paramètres (par valeur ou par référence) n'est connu ...
    ...

    Est-ce que vous voyez mieux le pb. maintenant ?

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Le nom de la DLL n'est connu qu'à l'exécution.
    Le nom de la fonction à appeller n'est connu qu'à l'exécution.
    Aucun problème.

    Le nombre de paramètres d'appel n'est connu qu'à l'exécution.
    Le type des paramètres ...
    Le type de passage des paramètres (par valeur ou par référence) n'est connu ...
    Il n'y aucune notion de type à l'execution, je vois donc mal comment tu ne peux connaître ceux-ci qu'à ce moment-là...

  6. #6
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Citation Envoyé par mchk0123
    A noter que j'ai sous la main une modélisation des prototypes des fonctions de la DLL (dont je connais le nb. de params, ref & value passing, types, ...).
    Pour être plus clair, à l'exécution, j'ai justement une hiérarchie d'instances de classes C++ décrivant la signature de chaque fonction.

    Effectivement il n'existe pas dans le langage C++ d'introspection. Mais j'ai recrée moi-même cette notion à l'aide d'une "cuisine" à moi.

    Donc pour en revenir à ma question : allocation mémoire & risques encourus à exécuter du code dedans.

  7. #7
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Cherche libffi. Mais ca risque de dependre de ton compilateur.

Discussions similaires

  1. allocation mémoire pour tableau de string
    Par alaninho dans le forum C++
    Réponses: 2
    Dernier message: 09/03/2012, 14h44
  2. Réponses: 6
    Dernier message: 14/01/2012, 21h08
  3. Schéma d'allocation mémoire pour une matrice
    Par Thierry Chappuis dans le forum C
    Réponses: 6
    Dernier message: 01/05/2011, 13h21
  4. Allocation mémoire pour exécution de code généré
    Par mchk0123 dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 06/04/2007, 16h26
  5. Réponses: 6
    Dernier message: 24/03/2006, 18h24

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