Qu'est-ce que / dev / mem?

On peut supposer que cela soit lié à la mémoire? Quel serait

sudo cat /dev/urandom > /dev/mem 

faire? Trash all RAM? Toute mémoire virtuelle non-noyau? Aucune de ces réponses?

  • Est-ce que l'ajout de RAM supplémentaire dans mon ordinateur l'accélérera?
  • Transfert lent avec memory stick (819 kb / s)
  • Comment interpréter les paramètres dans une fiche technique DIMM?
  • Gagnez 7 64 bits d'utilisation RAM exceptionnellement élevée (7 Go au ralenti)
  • Est-ce que 64 bits de Windows 8 «avertissement de faible mémoire» ont les mêmes limites que dans Windows 7 x64?
  • Est-ce mauvais d'utiliser deux emplacements qui ne sont pas adjacents les uns aux autres?
  • Processeur plus rapide ou plus de RAM?
  • Comment puis-je déterminer quel module RAM échoue Memtest86?
  • 5 Solutions collect form web for “Qu'est-ce que / dev / mem?”

    Il permet d'accéder à la mémoire physique du système.

    Voici quelques informations supplémentaires sur ce qu'est / dev / mem .

    Oui – cela pourrait causer toutes sortes de problèmes. Un redémarrage devrait vous corriger, mais les mauvaises choses peuvent arriver très facilement. Faites attention! 🙂

    / Dev / mem fournit l'accès à la mémoire physique du système et non à la mémoire virtuelle. L'espace d'adresses virtuelles des noyaux peut être consulté en utilisant / dev / kmem.

    Il est principalement utilisé pour accéder aux adresses de mémoire IO liées au matériel périphérique, comme les adaptateurs vidéo.

    sudo cat /dev/urandom > /dev/mem ne fera rien, puisque sudo augmentera le privilège de chat mais pas de la redirection. Vous pouvez faire sudo su puis travailler dans le shell racine, ou utiliser
    sudo dd if=/dev/urandom of=/dev/mem

    /dev/mem permet d'accéder à la mémoire physique, c'est-à-dire à toute la RAM du système, mais cela ne signifie pas qu'il vous permet d'accéder pleinement en lecture / écriture à la RAM (voir l'option CONFIG_STRICT_DEVMEM dans ce document). Notez également que certaines régions de la mémoire physique auront d'autres périphériques comme la mémoire de la carte vidéo, etc. mappés sur celui-ci.

    Écrire aveuglément à /dev/mem entraînera un comportement incertain, voici une vidéo youtube faisant de même.

    / Dev / mem a traditionnellement fourni l'accès à l'espace d'adressage physique entier. Cela inclut le ram, mais il comprend également tous les périphériques IO mappés en mémoire.

    Beaucoup de noyaux modernes seront configurés avec "CONFIG_STRICT_DEVMEM" qui restreint / dev / mem aux périphériques IO mappés en mémoire uniquement.

    L'écriture d'ordures aléatoires est une mauvaise idée, mais exactement, quelle est la mauvaise chose qui se produit, est difficile à prévoir. Le matériel peut répondre de manière imprévisible aux ordures aléatoires, les structures corrompues de la mémoire du noyau peuvent provoquer un comportement du noyau imprévisible. Au mieux, je m'attends à une panne du système, au pire de corruption de données ou même de briques de matériel n'est pas hors de question.

    PS note que votre commande lors de l'exécution en tant qu'utilisateur normal ne devrait pas faire quoi que ce soit, car le sudo n'élève que la commande cat, pas la redirection.

    Testez-le avec devmem2

    Source: http://free-electrons.com/pub/mirror/devmem2.c

    devmem2 est un petit utilitaire CLI qui mmaps /dev/mem et qui est déjà présent dans certaines distributions, donc vous voudrez peut-être l'utiliser directement au lieu de compiler le vôtre.

    Vous pouvez l'obtenir dans:

    • Buildroot avec: BR2_PACKAGE_DEVMEM2=y
    • Ubuntu 14.04 avec sudo apt-get install devmem2

    Utilisation: lisez 4 octets à partir de l'adresse physique 0x12345678 :

     devmem2 0x12345678 w 

    Ecrivez 0x9abcdef0 à cette adresse:

     devmem2 0x12345678 w 0x9abcdef0 

    CONFIG_STRICT_DEVMEM et nopat

    Pour effectuer des observations DRAM sur le noyau x86 v4.9, vous devez poing:

    • Désactivez CONFIG_STRICT_DEVMEM
    • Passer l'option de ligne de commande nopat kernel

    Les ports IO fonctionnent toujours sans ceux-ci.

    Voir aussi: https://stackoverflow.com/questions/39134990/mmap-of-dev-mem-fails-with-invalid-argument-for-virt-to-phys-address-but-addre/45127582#45127582

    Comment le tester

    Maintenant pour la partie amusante. Voici quelques configurations intéressantes:

    • Mémoire utilisateur
      • Allouer volatile variable volatile sur un processus d'utilisateur
      • Obtenir l'adresse physique avec /proc/<pid>/maps + /proc/<pid>/pagemap
      • L'adresse physique avec devmem2 , et regarder le processus userland réagir:
    • Mémoire Kernelland
      • kmalloc mémoire du noyau avec kmalloc
      • Obtenez l'adresse physique avec virt_to_phys et passez-le à userland
      • Modifiez l'adresse physique avec devmem2
      • Interrogez la valeur à partir du module noyau
    • IO mem et QEMU plate-forme virtuelle
      • Créer un périphérique de plate-forme avec des adresses de registre physiques connues
      • Utiliser devmem2 pour écrire au registre
      • Regarder les printf sortir du périphérique virtuel en réponse
    Soyons le génie de l'ordinateur et du réseau.