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.
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.
Bonsoir,
Sous quel OS ?Envoyé par gaut
Cordialement,
DS.
PS : en général, c'est (plus ou moins) possible. C'est le genre de services qu'offrent les débogueurs.
je suis sous win XP,
quels sont les moyens pour lire la memoire?
À 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.
Même avec ReadProcessMemory tu n'auras pas accès au variable du programme.
Bonjour,
Exact.Envoyé par Médinoc
A ma connaissance : sauf en ayant les privilèges nécessaires (mais je chipote).Envoyé par Médinoc
Ou d'autres moyens selon les besoins : voir "Interprocess Communications".Envoyé par Médinoc
Ce n'est pas vraiment un problème d'accès : le plus difficile est de savoir où elles se trouvent.Envoyé par hegros
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,")
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.Envoyé par David.Schris
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++
+
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.
Y'a pas les commandes vocales dans XP ?Envoyé par gaut
Ah... Comme quoi, j'ai peut-être bien fait de poser la question...Envoyé par gaut
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.
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?
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 ???Envoyé par gaut
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
Partager