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 :

acces mémoire pointers


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 117
    Points : 72
    Points
    72
    Par défaut acces mémoire pointers
    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.

  2. #2
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    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.

  3. #3
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    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.

  4. #4
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    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.

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Bonjour,

    Citation Envoyé par Guyome41 Voir le message
    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 ?
    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.

    Citation Envoyé par Matt_Houston Voir le message
    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.
    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).

    Citation Envoyé par dalfab Voir le message
    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 :[LIST][*]Le noyau et les pilotes système peuvent voir un processus (normalement un seul à fois!)
    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.

  6. #6
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Citation Envoyé par Dalfab
    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 :[LIST][*]Le noyau et les pilotes système peuvent voir un processus (normalement un seul à fois!)
    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.

Discussions similaires

  1. Problème d'accès mémoire
    Par bartmanb dans le forum C
    Réponses: 16
    Dernier message: 15/01/2008, 22h16
  2. Probleme d'acces mémoire des méthodes
    Par alexandre7g dans le forum VC++ .NET
    Réponses: 1
    Dernier message: 03/08/2007, 10h11
  3. Accés mémoire sur liste de classe
    Par sacados1 dans le forum C++
    Réponses: 4
    Dernier message: 31/03/2007, 20h42
  4. Violation accès mémoire
    Par BenjaminLustrement dans le forum C
    Réponses: 9
    Dernier message: 09/06/2006, 10h07

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