Comment lire en toute sécurité la mémoire sous Unix (ou au moins Linux)?

Je veux lire un octet de mémoire mais je ne sais pas si la mémoire est vraiment lisible ou non. Vous pouvez le faire sous OS X avec la fonction vm_read et sous Windows avec ReadProcessMemory ou avec _ try / _catch. Sous Linux, je pense pouvoir utiliser ptrace, mais seulement si ce n’est pas déjà fait.

Pour cette raison, j’écris du code de déchargement d’état du programme du gestionnaire d’exceptions, ce qui aide l’utilisateur si l’utilisateur peut voir quelles sont les différentes valeurs de la mémoire ou même si elles sont invalides.

Si vous n’avez pas besoin d’être rapide, ce qui est typique dans les gestionnaires de vidage / d’exception d’état de gestion de code, vous pouvez placer votre propre gestionnaire de signal avant la tentative d’access et le restaurer après. Incroyablement douloureux et lent, mais c’est fait.

Une autre approche consiste à parsingr le contenu de / dev / proc // maps pour créer une carte de la mémoire une fois, puis à chaque access, décidez si l’adresse est dans le processus ou non.

Si c’était moi, j’essayerais de trouver quelque chose qui le fait déjà et de réimplémenter ou de copier le code directement si la licence répondait à mes besoins. Il est pénible d’écrire à partir de zéro et agréable d’avoir quelque chose qui puisse donner des traces de support avec la résolution des symboles.