J'écris un outil de traçage qui doit gérer la sortie d'un JIT, de sorte que la pile peut sembler assez bizarre parfois. Je voudrais essayer d'appliquer des heuristiques aux adresses pour déterminer s'il s'agit de code, de données ou d'ordures. (Si je me trompe de temps en temps, ce n'est pas grave, mais si le processus se bloque, pas tellement.)Comment pouvez-vous vérifier efficacement le mappage de machine virtuelle pour une adresse?
Je peux cat /proc/«pid»/maps
pour obtenir une liste des mappages VM pour un processus sous Linux. Est-il possible d'accéder à ces informations (ou à n'importe quel sous-ensemble) depuis l'intérieur du processus sans analyser ce fichier? Il serait idéal d'examiner les bits rwx
pour une adresse. Essentiellement, je veux une version "read" de mprotect(2)
.
Si je ne peux pas faire cela, que diriez-vous de déterminer si un accès à une certaine adresse provoquera une erreur de segmentation? (Il y a déjà un gestionnaire SIGSEGV
installé dans ce cas et je ne peux pas facilement l'écraser, ou je le ferais juste.)