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?

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
  • Si la marque, la taille, la vitesse de MHz et les paramètres de latence de deux jeux de RAM sont identiques, fonctionneront-ils toujours correctement en mode double canal?
  • Est-il possible de démarrer un système i7 de consommateur avec un processeur Xeon et une mémoire ECC?
  • Quelles mesures prenez-vous lors de l'overclocking?
  • Comment mettre à niveau mes graphiques sur mon ordinateur portable?
  • Colonne massive non-paginée persistante
  • Windows ne voit que 768 Mo de RAM sur 4 Go
  • Mise à niveau RAM (2 Go + 2 Go) OU (2 Go + 4 Go)?
  • Comment mesurer l'utilisation totale de RAM d'un programme sous Windows?
  • Soyons le génie de l'ordinateur et du réseau.