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

Bibliothèques, systèmes et outils C Discussion :

Connaître qui lit où en mémoire et sur le disque


Sujet :

Bibliothèques, systèmes et outils C

  1. #1
    Invité
    Invité(e)
    Par défaut Connaître qui lit où en mémoire et sur le disque
    Bonjour,
    Je voudrais savoir si il y a un moyen de savoir qui lit où en mémoire et sur le disque (et concernant toutes les applications même celle en mode administrateur) si j'ai les droits administrateurs le problème ne se pose pas, il faudrait que ce soit possible de faire ceci sans les droits administrateur , je ne connait aucun moyen de faire ça , je ne pense pas qu'il y en ait mais je pose tout de même la question car j'en ai besoin.

    Merci d'avance.

  2. #2
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    Pas par les moyens classiques en tout cas. D'ailleurs j'aimerais bien savoir comment tu fais pour savoir qui lit ou et quand en memoire, meme avec les droit administrateur.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Tu veux dire quoi par : "Pas par les moyens classiques" ?
    Je hook par exemple readprocessmemory et toutes les autres fonctions qui permettent de lire quelque chose en mémoire ou sinon un driver et un hook ssdt (mais je n'y connais rien là)

  4. #4
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    Ce que j'entends par les "moyens classiques", ce sont justement les fonctions et API systemes. Si tu veux reussir a faire ca, va falloir creuser beaucoup plus je pense (sauf si bien entendu, ces memes fonctions te sont accessibles les droits administrateurs). Ce sera par des moyens detournes ou autres.

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Points : 719
    Points
    719
    Par défaut
    Moi je serais juste curieux de savoir ce que tu essayes de faire...
    Tu peux en dire plus sur ton projet ?

  6. #6
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 187
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 187
    Points : 17 135
    Points
    17 135
    Par défaut
    Sous linux, il y a une commande pour savoir quel fichier est ouvert, et par quel processus.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  7. #7
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Points : 719
    Points
    719
    Par défaut
    Citation Envoyé par leternel Voir le message
    Sous linux, il y a une commande pour savoir quel fichier est ouvert, et par quel processus.
    Exact, lsof.
    Et en théorie je suppose qu'il devrait être possible d'exécuter tout un système dans une machine virtuelle et de tracer tous les accès à la mémoire ou au(x) disque(s). C'est un sujet que je connais pas du tout toutefois, donc je voudrais bien que quelqu'un me le confirme.

    C'est pour ça que je serais curieux de savoir ce qu'est le but final du projet de yohann2008.

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Process Monitor et/ou Process Explorer peut faire ça, non?
    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.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Merci pour vos réponses,
    Citation Envoyé par imperio Voir le message
    Ce que j'entends par les "moyens classiques", ce sont justement les fonctions et API systemes. Si tu veux reussir a faire ca, va falloir creuser beaucoup plus je pense (sauf si bien entendu, ces memes fonctions te sont accessibles les droits administrateurs). Ce sera par des moyens detournes ou autres.
    Toujours pas compris où tu veux en venir désolé.

    Citation Envoyé par Médinoc Voir le message
    Process Monitor et/ou Process Explorer peut faire ça, non?
    Oui c'est exactement ça !! en ce moment j'ai pas eu beaucoup de temps mais il me semblait que un des deux listait les lectures/écriture sur le disque sans droit administrateur je n'arrive pas a retrouver cette fonctionnalité.

    Ici linux ne m’intéresse pas j'aurais du le préciser dans mon premier message, j'essaie depuis une programme d'avoir ces informations.(windows)

  10. #10
    Invité
    Invité(e)
    Par défaut
    J'ai essayé en vain de trouver cette fonctionnalité dans process explorer etc.
    Voilà ce que je voudrais en gros , avoir toutes ces informations sans droit administrateur et de même pour ce qui se passe en mémoire , même si ce n'est pas possible de savoir ça sans les droits administrateurs j'aimerais bien savoir les fonctions utilisée pour accéder a ces informations


    (ici on voit bien quel processus écrit et lit où)

    merci d'avance.

  11. #11
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    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 368
    Points : 23 616
    Points
    23 616
    Par défaut
    Écrire sur le disque, ça revient à piloter un périphérique, en dialoguant avec le contrôleur et en supervisant l'opération, qui peut échouer. Il est donc normal que cela passe par une procédure et on peut facilement monitorer les appels à celle-ci.

    « Lire en mémoire », par contre, c'est une opération fondamentale du micro-processeur. Ça se passe pour ainsi dire en dessous de la couche logicielle, et ça se produit en permanence. En fait, ton micro-processeur ne fait que trois choses : lire des données quelque part, appliquer un éventuel traitement arithmétique ou logique dessus et les réécrire autre part. Le simple fait d'exécuter un programme consiste en soi à lire son code objet et à l'interpréter. Il n'y a donc rien qui te dise si un processus est en train ou non de lire la mémoire.

    Par contre, il est possible de demander au système quelles sont les plages qui lui sont réservées et celles qu'il a lui-même réservées. Les appels comme ReadProcessMemory() servent à recopier une partie de l'espace mémoire d'un processus vers une zone tampon d'un autre processus pour que celui puisse l'examiner tranquillement mais ce n'est pas d'un usage courant. Il est également possible de demander au micro-processeur de lever une exception lorsqu'un accès est effectué vers une zone prédéfinie à l'avance, mais c'est surtout utile pour les débogueurs.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Je ne sait pas très bien si tu as compris ce que je voulais faire. je veux juste savoir quels possibilité qui s'offre a moi pour pouvoir savoir quel processus lit où (dans quel fichier et/ou zone mémoire) (comme mon image dans mon post d'avant qui indique que chrome.exe avec le PID xxxx lit actuellement x octet dans C:\Users\...) avec l'api windows en C/C++ depuis une application "normal", donc d'après ce que j'ai compris il faudrait que je passe absolument par un driver ?

  13. #13
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    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 368
    Points : 23 616
    Points
    23 616
    Par défaut
    Citation Envoyé par yohann2008 Voir le message
    Je ne sait pas très bien si tu as compris ce que je voulais faire. je veux juste savoir quels possibilité qui s'offre a moi pour pouvoir savoir quel processus lit où (dans quel fichier et/ou zone mémoire)
    Si, si. J'ai bien compris, mais je pense que de ton côté, tu ne sais pas entièrement comment ton ordinateur fonctionne en réalité. Tu as l'air de penser (ce qui pourrait être légitime) qu'on lit dans la mémoire exactement de la même façon qu'on lit dans un fichier, et que cela passe par un appel système, mais ce n'est absolument pas le cas.

    (comme mon image dans mon post d'avant qui indique que chrome.exe avec le PID xxxx lit actuellement x octet dans C:\Users\...) avec l'api windows en C/C++ depuis une application "normal", donc d'après ce que j'ai compris il faudrait que je passe absolument par un driver ?
    Pour les fichiers, ça relève de l'audit système. Je ne connais pas les API Windows en particulier, mais il y a des chances qu'elles fonctionnent exactement comme celles des autres systèmes d'exploitation. Sous Linux, par exemple, il y a plusieurs façons de faire : en l'absence d'infrastructures, tu peux placer des hooks sur les appels système (à la manière de strace) pour faire toi-même la somme de tous les octets reçus et envoyés par le programme mais pour que ce soit efficace sur tous les processus, c'est le système d'exploitation qui tient ces comptes. On les trouve notamment sous /proc/<pid>/… et les programmes tels qu'iotop se contentent alors de les mettre en forme. Linux est également doté de fonctions d'audit controlées entre autres par auditd. C'est un système de radiographie du noyau entier prévu par conception. Évidemment, il faut avoir les droits d'accès mais il est tout-à-fait possible de les demander pour redescendre ensuite aux privilèges d'un utilisateur normal (notamment via les capabilities).

    Pour la mémoire, ça ne passe pas par le système d'exploitation : c'est le micro-processeur qui la lit directement puisque c'est sa manière normale de fonctionner. À dire vrai, le concept même de logiciel est bâti SUR ce principe. Et ton micro-processeur lit ou écrit dans la mémoire en permanence, même si c'est dans le cadre d'un processus donné (qui est en fait un concept abstrait et propre au système d'exploitation). Quand tu utilises un pointeur, tu lis ou écris dans la mémoire, quand tu accèdes à une variable, tu lis ou écris dans la mémoire. Et même quand ton programme ne fait rien de spécial, ton micro-processeur lit malgré tout la même mémoire puisque c'est là qu'il y trouve les instructions qui composent ton programme, même si celles-ci lui ordonnent simplement de tourner en boucle et de ré-exécuter sans fin la même séquence.

  14. #14
    Invité
    Invité(e)
    Par défaut
    Ok je vois mais pour la lecture de la mémoire je parle d'une manière plus global ,pas du genre accès a un variable ou des trucs dans le genre,je pense plutôt lorsqu'un programme vas scanner d'autres processus pour chercher quelque chose de particulier dans ces processus et moi je veux pouvoir savoir cela.
    Merci pour ta réponse dans tous les cas... j'ai a peut près trouver quelque chose qui ressemble a ce que je voulais , en voyant tout les handles ouvert part un processus , en réalité j'èspèrais plutôt a une réponse de médinoc

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Obsidian a raison.

    Et la mémoire n'utilise pas de HANDLEs.
    Le seul moyen d'épier les accès mémoire d'un programme serait de trifouiller ses droits d'accès aux pages et se brancher au debugger dessus pour voir les exceptions Win32 que ça déclenche, ou utiliser des data breakpoints. Tenter de faire cela à grande échelle relève du masochisme, et l'impact sur les performances sera... substanciel.
    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.

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Et la mémoire n'utilise pas de HANDLEs.
    Je ne sais pas a qui s'addresse cette phrase , sans doute a moi , si oui je parlais de chercher les handles ouvert par un processus

    Citation Envoyé par Médinoc Voir le message
    Le seul moyen d'épier les accès mémoire d'un programme serait de trifouiller ses droits d'accès aux pages et se brancher au debugger dessus pour voir les exceptions Win32 que ça déclenche, ou utiliser des data breakpoints. Tenter de faire cela à grande échelle relève du masochisme, et l'impact sur les performances sera... substanciel.
    Désolé on s'est mal compris , ce que je veux savoir ce sont les accès mémoire d'un processus EGUI.EXE par exemple a d'autres processus et non voir ce qu'il fait dans son espace d’adressage
    je veux savoir par exemple EGUI.EXE (processus avec les droits administrateur) est en train de scanner skype.exe , explorer.exe (ou est en train d'ouvrir un handle sur skype.exe ou explorer.exe etc...)

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/10/2011, 08h59
  2. Applet qui lit des fichier sur le serveur
    Par morofiler dans le forum Applets
    Réponses: 3
    Dernier message: 04/05/2011, 14h15
  3. Réponses: 1
    Dernier message: 19/08/2009, 18h20
  4. [Système]Connaître qui est sur ma base?
    Par juliojc13 dans le forum VBA Access
    Réponses: 14
    Dernier message: 05/05/2007, 00h10
  5. [reseaux] prog qui lit le process
    Par louloul dans le forum Programmation et administration système
    Réponses: 5
    Dernier message: 25/11/2004, 17h07

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