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 :

Communiquer avec un DLL ? Newbie :(


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 434
    Par défaut Communiquer avec un DLL ? Newbie :(
    Bonjour, dans un programme c++ j'utilise une dll qui hook les fonctions de certains processus. Je ne comprend pas totalement le fonctionnement des dll c'est pourquoi j'ai un peu de mal.
    Je voudrais pouvoir compter dans mon programme le nombre de fois qu'une fonction hookée est appellée, pour chaque groupe de processus, par exemple, si proc1.exe a appelé 1 fois func1, qu'un autre proc1.exe a appelé 2 fois func1 et que proc2.exe a appelé 1 fois func1, il faudrait que dans mon programme un liste contienne proc1=3 et proc2=1, j'espère être clair.

    Je pensais au départ créer une fonction dans la dll que j'appelle dans de mon programme avec en argument un liste et que la dll remplisse celle ci mais si je comprend bien la dll est multiple et donc celle appelée dans un processus ne sait rien de celle appelé dans un autre processus donc je ne sais pas du tout comment m'en sortir.

    Voila la question a surement déjà été traitée, mais dans ce que j'ai pu trouvé je n'ai pas compris grand chose, les liens donnés sont souvent des détails complets sur la mise en place et l'utilisation avancée des dlls, si possible j'aimerais de l'aide pour mon cas précis.

    Un grand merci d'avance.

  2. #2
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par défaut
    Bonjour,

    Citation Envoyé par supergrey Voir le message
    Je pensais au départ créer une fonction dans la dll que j'appelle dans de mon programme avec en argument un liste et que la dll remplisse celle ci mais si je comprend bien la dll est multiple et donc celle appelée dans un processus ne sait rien de celle appelé dans un autre processus donc je ne sais pas du tout comment m'en sortir.
    C'est bien cela. La DLL se retrouve mappée dans l'espace d'adressage de chaque processus, elle est donc, en quelque sorte, unique à chaque processus et ne peut pas communiquer avec les autres instances.

    Toutefois on peut faire de la communication inter-processus (IPC). Le plus simple dans ton cas, serait d'utiliser un fichier de mapping accessible à tous les processus contenant la DLL de hook.

    Pour cela il suffit que la DLL créée ce fichier de mapping via l'API CreateFileMapping(). Il ne s'agit pas forcément d'un fichier existant. On peut créer un objet de mapping en passant INVALID_HANDLE_VALUE pour la paramètre hFile.

    Dans ton cas il faudra spécifier la taille de ton objet de mapping ainsi qu'un nom (de façon à ce que les autres processus puissent accéder au mapping en question). Le nom pourra être préfixé de Global\ ou Local\ suivant tes besoins.

    Une fois que tous les processus ont accès à l'objet de mapping il suffira d'incrémenter la variable relative à un processus à chaque fois qu'un processus appel une fonction hookée.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Si tu comprends l'anglais, ceci devrait t'intéresser:
    Using Shared Memory in a Dynamic-Link Library
    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
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 434
    Par défaut
    Merci à tous les deux c'est tout à fait ce qu'il me faut, reste à le faire fonctionner mais c'est en bonne voie.
    Je vous tiens au courant...

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 434
    Par défaut
    Bon, ben ça marche, RESOLU, merci encore !

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 434
    Par défaut
    Est-ce qu'il y a une limite particulière parceque ça fonctionne bien mais quand je vais un peu loin ça bug, et j'ai un peu de mal à débugger comme c'est une dll... ?

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 22/12/2010, 15h47
  2. communiquer avec une DLL (COM interop)
    Par aA189 dans le forum EDI/Outils
    Réponses: 0
    Dernier message: 23/04/2010, 20h24
  3. Communiquer avec une DLL externe
    Par Alekhine dans le forum API, COM et SDKs
    Réponses: 10
    Dernier message: 22/02/2009, 15h49
  4. Comment communiquer avec une dll, source à l'appui
    Par alpha_one_x86 dans le forum C++
    Réponses: 3
    Dernier message: 06/11/2008, 19h17
  5. Communiquer avec une DLL depuis un driver .SYS
    Par barthelv dans le forum Windows
    Réponses: 17
    Dernier message: 03/04/2006, 10h43

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