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 :

Récupérer une valeur dans un processus.


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut Récupérer une valeur dans un processus.
    Bonjour,

    J'ai un programme que je lance plusieurs fois pour avoir de multiples instances.
    En éditant le programme, j'ai pu trouver l'adresse mémoire qui stock la valeur que je veux récupérer. Elle est la même dans chaque programme.

    Par exemple il trouve l'adresse 01AF7F50. Et donc à cette adresse, dans chaque processus je trouve la valeur qui m’intéresse. Le but étant de récupérer cette valeur à intervalles de temps réguliers pour faire des graphes comparatifs.

    Pour cela j'ai utilisé un programme tiers. Maintenant en C uniquement sachant que dans chacun des processus je peux trouver cette valeur à l'adresse 01AF750, comment est ce que je peux récupérer cette valeur ?

    Merci d'avance pour vos réponses.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 484
    Par défaut
    Citation Envoyé par darkwall_37 Voir le message
    Pour cela j'ai utilisé un programme tiers. Maintenant en C uniquement sachant que dans chacun des processus je peux trouver cette valeur à l'adresse 01AF750, comment est ce que je peux récupérer cette valeur ?

    Merci d'avance pour vos réponses.
    Ça va dépendre essentiellement du système d'exploitation que tu utilises car, d'une part, tous ne chargent pas leurs programmes au même endroit et, d'autre part, il va falloir demander la permission à ce même système d'utiliser des fonctions normalement réservées au débogage pour obtenir un pointeur sur un segment de mémoire qui n'est pas celui de ton programme.

    En plus, tu ne pourras pas garantir que cette adresse sera systématiquement la même lors de toutes les exécutions et, sur PC au moins, ce sera de toutes façons un offset par rapport au début d'un segment dont on te donnera l'emplacement puisqu'il y a des chances que ton propre programme soit lui-même mappé au même endroit.

  3. #3
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    Oui je comprends bien.
    Pour l'offset de cette valeur qui est celle mentionnée à priori elle ne change pas. En revanche oui le segment mémoire où il se trouve c'est sûrement une autre affaire.
    Je suis sur du Windows (7x 64).
    Après quant au fait que je puisse aller lire ces valeurs en mémoire je ne pense pas pouvoir le deviner avant d'avoir essayé de constater.
    Mais à priori si le programme que j'utilise me permet de lire la valeur, je suppose que cela doit être possible.

    Merci pour tes précisions.

  4. #4
    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
    Typiquement pour retrouver une variable globale d'un autre processus, même avec l'ASLR d'activée, l'offset par rapport à l'adresse de chargement du module (EXE ou DLL) ne change pas (la pile par contre, est une autre histoire).

    Un petit EnumProcesModules() ou CreateToolHelp32Snapshot() sur le processus en question peut obtenir l'adresse de chargement du module. Ensuite, un petit ReadProcessMemory() marchera si tu as les droits.
    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.

Discussions similaires

  1. Récupérer une valeur dans une JList
    Par Noosymer dans le forum Composants
    Réponses: 6
    Dernier message: 17/06/2010, 23h53
  2. [VBA-A] Récupérer une valeur dans une table Access
    Par Dude2006 dans le forum VBA Access
    Réponses: 1
    Dernier message: 15/04/2006, 23h56
  3. récupérer une valeur dans un selected
    Par lacfab dans le forum Langage
    Réponses: 6
    Dernier message: 14/12/2005, 09h48
  4. Réponses: 5
    Dernier message: 09/09/2005, 17h51
  5. problème pour récupérer une valeur dans ma bd (débutante)
    Par auryn111 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/08/2005, 17h49

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