Bonjour a tous, je débute en langage C et je li un cours sur les pointers.
J'aimerai savoir si il est possible d'accéder a un registre mémoire d'un programme externe via un pointeur ?
Merci d'avance.
Bonjour a tous, je débute en langage C et je li un cours sur les pointers.
J'aimerai savoir si il est possible d'accéder a un registre mémoire d'un programme externe via un pointeur ?
Merci d'avance.
C'est spécifique au système, pas au langage C. Au sein d'un processus qui s'exécute lui-même en espace utilisateur, sauf erreur de ma part c'est impossible sous Unix (il faut recourir à la communication inter-processus) et c'est possible sous Windows sous réserve que ce même processus détienne les privilèges administrateur.
Salut,
un peu chaud de débuter en C avec ça, nop ?
Ce serait pas plus simple d'utiliser un outil existant ?
Plus je connais de langages, plus j'aime le C.
Bonjour,
Si ta question est "est-ce que l'on peut pointer sur la mémoire d'un autre process?", la réponse est non.
Un processus ne peut voir le code ou les données d'un autre processus, seules exceptions :
- Le noyau et les pilotes système peuvent voir un processus (normalement un seul à fois!)
- Un processus peut créer une zone de mémoire partagée (shared memory), cette zone pourra être accédée par plusieurs processus.
- Un debugger étant père du processus, il a les droits suffisants pour demander au noyau de lire la mémoire du processus debuggé, en POSIX la fonction long ptrace( enum __ptrace_request request , pid_t pid , void* addr , void* data ); permet cela.
Bonjour,
Techniquement oui, spécialement si ton programme s'exécute sur une machine rudimentaire qui n'est pas équipé d'un mode protégé. Cela va être vrai également si tu programmes en mode noyau.
Si, par contre, tu veux savoir si tu veux le faire en programmation système classique sur un PC ordinaire sous Linux ou Windows, ou sur un serveur comme un Solaris, par exemple, le système t'en empêchera pour deux raisons : la première est une question de confidentialité évidente, et des droits d'accès sont alors mis en place pour déclencher une segfault si jamais tu essaies de le faire. La seconde est due au fait que les codes de tes différents processus, bien que chargés à des emplacement propres de la mémoire physique, sont en fait conçus pour être exécutés au même endroit. La MMU va alors mapper les pages de mémoires correspondantes à la même adresse virtuelle et ceci, par définition, va t'empêcher d'accéder à un processus depuis un autre.
C'est possible sous Unix avec ptrace(), comme dit plus haut et qui sert justement à monitorer un processus depuis un autre à condition d'avoir le droit de le faire (et qui demande ensuite au système de lui donner accès aux ressources demandées).
Pas forcément. En mode noyau, tu as accès à la mémoire physique, dans laquelle tu peux conserver les informations de plusieurs processus, tant qu'il y a de la place. Tu as également accès à la liste des pages actuellement en mémoire ou dans le swap.
C'est pourquoi j'ai indiqué que le noyau pouvait accéder à un seul processus à la fois, accéder directement aux pages MMU est en effet faisable mais oblige à bloquer à la fois le scheduling et les interruptions, tout ceci pour 'voir' plusieurs processus. Il y a donc des pointeurs du noyau vers une appli, mais normalement jamais des pointeurs vers des applis. Il reste comme tu l'as indiqué la possibilité de pouvoir conserver des informations sur plusieurs processus.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager