Comment trouver l'adresse physique d'une variable depuis l'espace utilisateur sous Linux?
Je veux trouver l'adresse physique d'une variable définie dans un processus de l'espace utilisateur? Est-il possible de le faire en utilisant les privilèges de root?
source d'informationauteur Sandip
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, pourquoi voudriez-vous faire cela? Le but des modernes systèmes de mémoire virtuelle est de supprimer le programmeur d'application de la complexité de physocal disposition de la mémoire. Gving chacun leur propre uniforme de l'espace d'adresse de leur rendre la vie plus simple.
Si vous ne voulez faire cela, vous auriez presque certanly besoin d'utiliser un module du noyau. Obtenir l'adresse virtuelle de la variable dans la voie normale, l'utilisation de cet index dans le processus de tables de pages et de lire la valeur que vous trouvez(l'adresse physique de l'image). Puis ajouter le décalage de page pour obtenir l'adresse physique complète. Remarque vous ne pourrez pas utiliser cette adresse lors de la pagination est activée.
(Si votre chance, vous pouvez être en mesure d'obtenir l'adresse de cadre d'une VM région, à partir du système de fichiers /proc et donc pas besoin d'écrire un module du noyau.)
Que partiellement répondu avant, les programmes normaux ne devraient pas avoir à vous soucier des adresses physiques qu'ils s'exécutent dans un espace d'adressage virtuel avec toutes ses commodités. En outre, ne sont pas tous d'adressage virtuel possède une adresse physique, peuvent appartenir à des fichiers mappés ou d'échanger les pages. Cependant, parfois, il peut être intéressant de voir cette cartographie, même en userland.
À cette fin, le noyau Linux expose sa cartographie de l'espace utilisateur par le biais d'un ensemble de fichiers dans le
/proc
. La documentation peut être trouvée ici. Bref résumé:/proc/$pid/maps
fournit une liste de mappages d'adresses virtuelles ainsi que des informations supplémentaires, telles que le fichier correspondant pour les fichiers mappés./proc/$pid/pagemap
fournit plus d'informations sur chaque page mappé, y compris l'adresse physique si elle existe.Ce site internet offre un programme C qui vide les mappages de tous les processus en cours d'exécution à l'aide de cette interface et une explication de ce qu'il fait.