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

Windows Discussion :

retrouver un HANDLE sur un module ?


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 19
    Par défaut retrouver un HANDLE sur un module ?
    Bonjour à tous !

    Je voudrais créer une application (MonApp.exe) capable de lancer un exécutable (calc.exe) et de retrouver ensuite un HANDLE sur le module correspondant (calc).

    Si je fais appel à CreateProcess() pour lancer calc.exe, je crois que calc est mappé dans un espace virtuel indépendant de celui de MonApp.

    Dès lors, je ne suis pas à même de retrouver un HANDLE sur calc par un appel à la fonction GetModuleHandle(), qui ne travaillera que dans l'espace virtuel propre de MonApp.

    Je voudrais savoir :
    - s'il est possible de retrouver un HANDLE sur un module mappé dans un autre espace virtuel ;

    - s'il est possible de lancer calc dans l'espace virtuel de MonApp afin d'utiliser GetModuleHandle() dans cet espacevirtuel. Si je fais appel à LoadLibrary() pour mapper calc, cette fonction ne permet pas de lancer calc par la suite (enfin... d'après la doc !) ;

    (avec quelle fonction de l'API).

    Merci,


    Juan.

  2. #2
    MPB
    MPB est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 7
    Par défaut
    cherche des informations sur la fonction GetModuleHandle

  3. #3
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Je voudrais créer une application (MonApp.exe) capable de lancer un exécutable (calc.exe) et de retrouver ensuite un HANDLE sur le module correspondant (calc).
    Dans quel but ?

    Si je fais appel à CreateProcess() pour lancer calc.exe, je crois que calc est mappé dans un espace virtuel indépendant de celui de MonApp.
    Tu crées un processus, et chaque processus possède son espace d'adressage privé. C'est le fondement même d'un processus sur les OS dignes de ce nom.

    - s'il est possible de retrouver un HANDLE sur un module mappé dans un autre espace virtuel ;
    Oui, avec EnumProcessModules.

    - s'il est possible de lancer calc dans l'espace virtuel de MonApp afin d'utiliser GetModuleHandle() dans cet espacevirtuel
    non, un processus doit avoir son propre espace d'adressage, et les exe sont tous mappés à la même adresse (0x400000, la valeur renvoyée par GetModuleHandle(NULL)). Donc toi tu demandes à mapper au même endroit 2 exe...
    http://msdn.microsoft.com/library/en-us/memory/base/virtual_address_space.asp

    Si je fais appel à LoadLibrary() pour mapper calc, cette fonction ne permet pas de lancer calc par la suite (enfin... d'après la doc !) ;
    Une dll est concue pour pouvoir être mappée à n'importe quelle adresse. Vu que son adresse de base est variable (contrairement à celle des exe où elle est tjrs 0x400000) ben il existe une table de relocation que l'OS initialise en fonction de l'adresse a laquelle la dll a été chargée afin que celle-ci fonctionne (cette opération s'appelle le rebasing).
    http://msdn.microsoft.com/library/en-us/dndllpro/html/msdn_pagetest.asp
    Un exe ne peut pas être relogé, il est prévu pour être chargé et fonctionner uniquement à l'adresse 0x400000.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 19
    Par défaut
    Merci pour tes indications.

    Je m'intéresse à la possibilité de retrouver un HANDLE sur un module pcq j'ai d'abord appris à utiliser la fonction GetModuleHandle().

    Elle m'a permis de retrouver des caractères de l'exe - évidemment d'abord le 'M' du Dos-header, et à partir de là tous les autres...

    ...seulement retrouver les caractères du code compilé de MonApp.exe, ça n'a pas bcp de sens, ni d'utilité.

    Par contre, si je peux faire pareil avec un exe quelconque, c'est déjà plus utile et intéressant.

    Je conserve un doute avec EnumProcessModules() car j'ai vu qu'elle travaile à travers un snapshot.

    bon... je vais essayer...et on verra bien...


    à bientôt,

    Juan.

  5. #5
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    T'as pas besoin de GetModuleHandle pour obtenir le dos header. Ce dernier est le début de tout module PE. Donc tu ouvres le fichier comme un simple fichier binaire, il commence par le dos header...

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

Discussions similaires

  1. Réponses: 35
    Dernier message: 10/05/2006, 01h11
  2. message d'erreur sur test module
    Par Daniel MOREAU dans le forum Access
    Réponses: 5
    Dernier message: 23/11/2005, 20h19
  3. retrouver les contraintes sur une colonne
    Par kalari dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 18/10/2005, 17h03
  4. Comment retrouver le handle d'une application console?
    Par Laurent Dardenne dans le forum Windows
    Réponses: 7
    Dernier message: 22/12/2004, 16h58

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