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 :

Connaître l'appelant d'une DLL


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 27
    Par défaut Connaître l'appelant d'une DLL
    Bonjour,

    Je lance une dll que j'ai faite en C++ avec Python.

    La fonction testAppelant contenue dans la dll est déclarée comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     extern "C" __declspec(dllexport) void testAppelant()
    Dans cette fonction testAppelant j'aimerai identifier le module .py qui a chargé la DLL.

    J'ai essayé avec GetModuleFileName mais ça me donne juste le nom de l'interpréteur Python.exe

    Est ce que vous avez déjà fait ça ? Est ce possible?

    D'avance merci pour toutes pistes à suivre

  2. #2
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    J'ai peur que ça te donne les mêmes résultat que précédemment mais tu peux peut-être essayer ceci.

    Sinon j'ai bien peur qu'il faille que l'information soit donné par l'appelant à ta DLL via un point d'entrée par exemple.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    J'ai bien peur que ce soit impossible. Surtout pour du code interprété.

    Et même pour du code compilé, on ne peut pas faire confiance à l'adresse de retour (sauf en .Net/Java).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 540
    Par défaut
    Salut totalement impossible parce que Python c'est du code interprété...
    et même en faisant une énumération des modules/dll chargés en mémoire par Windows cela n'apportera rien de plus.

    Eventuellement en connaissant l'adresse mémoire de l'interpréteur Python , de cette adresse tu peux essayer de parcourir la mémoire et tenter de trouver s'il ya la chaine de caractère .py

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 27
    Par défaut
    Merci à tous pour vos réponses.

    Merci TheGZD pour le code fourni mais j'avais fait un truc du genre mais ça ne donne pas beaucoup plus que Python.exe c'est à dire pas grand chose.

    En fait c'était pour faire de l'authentification donc si c'est le programme qui donne en entrée l'info c'est pas terrible comme principe d'authentification...

    J'ai trainé un peu dans les adresses mémoires mais c'est vraiment démoralisant de parcourir la mémoire à la main ! Autant trouver une aiguille dans une botte de foin.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Hello

    Sécuriser un code de sorte que son appelant soit identifié est extrêmement difficile et est une problématique qui n'a pas de solution canonique. Le mieux à faire étant d'utiliser le système d'authentification fourni par l'os que tu utilises, amha.

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Si c'est pour de l'authentification, en temps normal je te référerais à nouveaux à mes deux liens.

    Mais comme il s'agit d'un langage interprété, je te conseille de regarder s'il n'y a pas des mécanismes dans Python même: Un langage interprété ne peut pas falsifier sa pile d'appels comme un langage natif (voir .Net). Par contre, il faudrait que toutes les DLLs puissent être bloquées par l'interpréteur, car dès qu'on permet à du code natif non-sûr de s'exécuter, la sécurité tombe à l'eau.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    De toutes manières, et même si cet avis m'est personnel, j'aurais tendance à dire que le but d'une dll est de fournir un certain nombre de services, et qu'il n'est donc pas de son domaine de vérifier qui fait appel à ces services.

    Tu ne peux, en effet, même pas être sur que ta dll sera exclusivement utilisée avec python, car, de prime abord, il n'est pas exclu qu'elle présente suffisemment d'intérêt pour être utilisée dans un projet pour lequel tu n'aurais sans doute jamais osé imaginer qu'elle le serait

    En outre, il faut garder en tête le fait que le but même des dll est... de fournir une partie "indépendante" de l'application qui l'utilisera: Qu'une dll dépende (pour la fourniture de certains services) d'autres dll n'est pas impensable, mais il ne me semble vraiment pas cohérent de forcer la dépendance de la dll avec... l'application qui l'utilise
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Citation Envoyé par koala01 Voir le message
    mais il ne me semble vraiment pas cohérent de forcer la dépendance de la dll avec... l'application qui l'utilise
    Ca dépend, si ton application se compose de plusieurs exécutables, il peut être intéressant de les faire se partager une DLL.

  10. #10
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par jblecanard Voir le message
    Ca dépend, si ton application se compose de plusieurs exécutables, il peut être intéressant de les faire se partager une DLL.
    Justement...

    Ce sont plusieurs exécutables qui utilisent la dll, et non la dll qui doit dépendre de plusieurs exécutables (hormis des dll de dépendance, qui, de toutes façons, sont indépendantes de la dll en question )

    Encore une fois, la dll fournit un certain nombre de service, peut, pourquoi pas, utiliser des fonctions et des structures définies "en dehors", mais qui ne sont, en aucun cas, des fonctions et des structures propres à l'application (exécutable) qui fait appel à la dll
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  11. #11
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Encore une fois, la dll fournit un certain nombre de service, peut, pourquoi pas, utiliser des fonctions et des structures définies "en dehors", mais qui ne sont, en aucun cas, des fonctions et des structures propres à l'application (exécutable) qui fait appel à la dll
    Ok, je suis d'accord, ce serait une erreur de design. De toute façon, ça ne compilerai même pas, puisque la dll doit être compilée et linkée avant l'exécutable.

Discussions similaires

  1. PB appel d'une DLL
    Par maveric dans le forum VC++ .NET
    Réponses: 2
    Dernier message: 10/08/2006, 19h17
  2. Appel d'une Dll dans le dossier courant.
    Par méphistopheles dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/07/2006, 21h00
  3. Appel d'une dll (c++) dans un programme c++
    Par cout dans le forum C++
    Réponses: 2
    Dernier message: 01/06/2006, 14h52
  4. Comment connaître les fonctions d'une DLL ?
    Par bencot dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 15/06/2005, 09h25

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