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 :

lire la memoire d'un autre programme


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 140
    Par défaut lire la memoire d'un autre programme
    j'aimerais savoir si il est possible en C de lire la memoire d'un autre programme en cours d'execution, et si c'est possible alors peut on recuperer les valeurs des variables.

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut
    Bonsoir,

    Citation Envoyé par gaut
    j'aimerais savoir si il est possible en C de lire la memoire d'un autre programme en cours d'execution, et si c'est possible alors peut on recuperer les valeurs des variables.
    Sous quel OS ?

    Cordialement,
    DS.

    PS : en général, c'est (plus ou moins) possible. C'est le genre de services qu'offrent les débogueurs.

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par gaut
    j'aimerais savoir si il est possible en C de lire la memoire d'un autre programme en cours d'execution, et si c'est possible alors peut on recuperer les valeurs des variables.
    Non.

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 140
    Par défaut
    je suis sous win XP,

    quels sont les moyens pour lire la memoire?

  5. #5
    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
    À part un debugger, tu peux utiliser des fonctions système comme ReadProcessMemory() pour lire dans un processus t'appartenant.
    Mais tu n'auras aucun accès à un processus s'exécutant sous un autre compte utilisateur...


    Mais si tu veux juste faire de la communicatin entre deux programmes développés par toi, tu peux toujours utiliser un segment de mémoire partagée...
    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.

  6. #6
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Même avec ReadProcessMemory tu n'auras pas accès au variable du programme.

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut
    Bonjour,

    Citation Envoyé par Médinoc
    À part un debugger, tu peux utiliser des fonctions système comme ReadProcessMemory() pour lire dans un processus [...]
    Exact.

    Citation Envoyé par Médinoc
    Mais tu n'auras aucun accès à un processus s'exécutant sous un autre compte utilisateur...
    A ma connaissance : sauf en ayant les privilèges nécessaires (mais je chipote).

    Citation Envoyé par Médinoc
    Mais si tu veux juste faire de la communicatin entre deux programmes développés par toi, tu peux toujours utiliser un segment de mémoire partagée...
    Ou d'autres moyens selon les besoins : voir "Interprocess Communications".

    Citation Envoyé par hegros
    Même avec ReadProcessMemory tu n'auras pas accès au variable du programme.
    Ce n'est pas vraiment un problème d'accès : le plus difficile est de savoir elles se trouvent.
    Par contre, dans le cas de certaines variables locales dans un programme optimisé (par le compilateur), il est vrai que ReadProcessMemory() ne sera d'aucune aide : elles peuvent être dans un registre [1].

    @gaut : tes questions sont-elles juste théoriques ou as-tu un problème concret à résoudre ? Si tu as un problème concret à résoudre, il serait temps de le décrire plus en détail. Autrement dit, avant de chercher comment résoudre un problème, il est conseillé de clairement et précisément définir son besoin (i.e. : savoir exactement "quoi" avant de chercher "comment").
    Aussi, pour aller plus loin, il te faudra comprendre (si ce n'est pas déjà fait) qu'il n'y a pas forcément de correpondance exacte entre le code source d'un programme et sa représentation en mémoire (i.e. : "une variable dans le code source" ne veut pas forcément dire "un emplacement fixe en mémoire").
    Enfin, il y a des outils, parfois proches des débogueurs, qui peuvent aider à repérer des variables en mémoire : les "trainers" (créés pour, par exemple, tricher dans certains jeux).

    Cordialement,
    DS.

    [1] - Ou ne plus exister du tout...

    PS (@Médinoc) : je crois que c'est la première fois que je vois quelqu'un prendre la peine de saisir une majuscule accentuée (cf. "À part un debugger,")

  8. #8
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par David.Schris
    ...et sa représentation en mémoire (i.e. : "une variable dans le code source" ne veut pas forcément dire "un emplacement fixe en mémoire").
    Tu aurais un exemple précis? Pour moi, une variable correspond toujours à un emplacement précis en mémoire (tu parles de l'espace d'adressage d'un processus ou de la mémoire physique?), mais je suis en train de me former, alors je suis curieux.

    Meilleures salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  9. #9
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 140
    Par défaut
    j'utilise dragon naturally speaking, version preferred pour ceux qui connaisse, et ce programme ne permet pas d'implanter ses propres commandes vocales pour controler une fenetre ou un programme, et donc pour en venir a ce que je souhaiterais faire : j'aimerais recuperer le phrase "compris" par le logiciel quand je lui parle via le microphone pour l'utiliser dans mon programme avec lequel je pourrais créer n'importe quel commande pour utiliser l'ordinateur.

  10. #10
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par gaut
    j'utilise dragon naturally speaking, version preferred pour ceux qui connaisse, et ce programme ne permet pas d'implanter ses propres commandes vocales pour controler une fenetre ou un programme,<...>
    Y'a pas les commandes vocales dans XP ?

  11. #11
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut
    Citation Envoyé par gaut
    j'utilise dragon naturally speaking, version preferred pour ceux qui connaisse, et ce programme ne permet pas d'implanter ses propres commandes vocales pour controler une fenetre ou un programme, et donc pour en venir a ce que je souhaiterais faire : j'aimerais recuperer le phrase "compris" par le logiciel quand je lui parle via le microphone pour l'utiliser dans mon programme avec lequel je pourrais créer n'importe quel commande pour utiliser l'ordinateur.
    Ah... Comme quoi, j'ai peut-être bien fait de poser la question...
    Dans ce cas, il vaut peut-être mieux se tourner vers une solution plus simple.
    Cela peut-être :
    - une solution alternative (cf. message d'Emmanuel ou plus généralement utilisation d'une autre solution logicielle) ;
    - une solution basée sur le logiciel (une option que tu n'aurais pas vue, une extension à acheter, etc) ;
    - une "solution technique maison".

    Dans le troisième cas, elle se basera plus probablement sur les actions du programme (appels de fonctions, envoi de messages Windows, etc) que sur son état (valeur de telle ou telle variable).
    Par exemple, si DNS (que je ne connais pas) simule l'appui sur les touches "c", "o", "m", "p", "r", "i" et "s" lorsque le mot "compris" est prononcé, il peut être possible de détecter cette séquence de touches pour agir en conséquence.
    Dans tous les cas, ce type de solution n'est envisageable que si :
    - on a une bonne connaissance du fonctionnement des applications et du système ;
    - on a une bonne connaissance du fonctionnement (interne) du logiciel en question.
    Bref : rien d'évident et un "coût" (en temps, etc) probablement trop important comparé au gain.

  12. #12
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 140
    Par défaut
    la proposition qui me tente le plus, vu que je suis allé voir ce qu'est-ce qu'un trainer et comment il fonctionne, c'est celle sur la memoire virtuelle qui apparement ne change pas, et donc qui s'avere toujours precise.

    le trainer fonctionnait de cette facon la :
    il demande d'entrer une valeur par exemple "bonjour monsieur x", il va recherché dans la memoire utiliser par le programme toutes les adresses memoires correspondant a "bonjour monsieur x", a mon avis pour cet exemple il pourra trouvé qu'une seule adresse ou en tout cas tres peu d'adresse vu la precision de la demande. la ou les adresses récuperées sont des adresses virtuelles de variable.

    dans quel sens ca fonctionne : d'abord trouver l'adresse virtuelle pour ensuite lire la valeur, ou : d'abord lire la valeur pour ensuite trouver l'adresse virtuelle.

    Donc pour eclaircir ma question comment je dois m'y prendre pour lire la memoire d'un processus?

  13. #13
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    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 527
    Par défaut
    Citation Envoyé par gaut
    j'aimerais recuperer le phrase "compris" par le logiciel quand je lui parle via le microphone pour l'utiliser dans mon programme avec lequel je pourrais créer n'importe quel commande pour utiliser l'ordinateur.
    Avant d'aller bricoler un programme qui risque de ne pas fonctionner et de t'embrouiller dans des API difficilement gérables , est-ce que tu t'est renseigné de savoir sir Dragon Speaking offrait une interface de programmation afin que tu puisses toi-même paramêtrer tes propres fonctionnalités ???
    Je suis sur qu'il doit y avoir un SDK pour Dragon Speaking... programmable dans n'importe que langage ( je parie à 100% dans ce cas-là que ce sera des objets COM )

    en 2minutes chrono j'ai déjà trouvé cela :
    http://support.nuance.com/

    suffit de s'enregistrer

Discussions similaires

  1. Réponses: 7
    Dernier message: 17/04/2013, 22h26
  2. Comment obtenir l'adresse d'un autre programme en memoire ?
    Par Maverick357 dans le forum Windows
    Réponses: 4
    Dernier message: 24/05/2012, 08h02
  3. Comme lire la mémoire d'un autre programme ?
    Par cmarcx dans le forum Langage
    Réponses: 1
    Dernier message: 29/10/2007, 13h51
  4. Réponses: 0
    Dernier message: 30/09/2007, 00h10
  5. Lire et modifier un port com utilisé par un autre programme
    Par KBNOT-PRC600 dans le forum Langage
    Réponses: 5
    Dernier message: 12/02/2006, 17h40

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