Il y a beaucoup de problèmes à essayer de faire ceci, tout d'abord, comme mentionné par Wilson, vous n'aurez vraiment aucune idée de ce qui y est stocké. Wilson est légèrement éteint, cependant, vous devriez vraiment le transformer en un char au lieu d'un int, comme avec un int, vous verrez 4 octets pas un seul octet comme vous le feriez avec un char. En outre, à moins que vous ne puissiez lire les caractères ASCII 8 bits et les mapper à quelque chose de significatif dans votre tête, vous voudrez probablement le convertir à une autre forme comme base2, base8 ou base16.
Vous pouvez le faire de plusieurs façons - probablement la meilleure façon de le faire est avec les opérateurs bit à bit et les opérateurs de décalage binaire, recherchant dans une table de répartition pour le mapper en ASCII visible.
Cependant, vous ne saurez toujours pas ce qui y est stocké, vous pourrez simplement voir une forme codée des données binaires brutes. La raison en est que C n'est typé que par rapport à la variable pointant vers cette adresse mémoire. Une vue nue dans cette mémoire vous donnera seulement binaire et aucune capacité de rechercher quelles variables sont liées à la mémoire ou de quel type sont ces variables.
Un deuxième problème est que vous devez faire attention à ne regarder que dans certaines parties de la mémoire à laquelle vous avez accès. À moins de faire attention à la façon dont vous y accédez, vous ne pouvez pas examiner les segments de code de la mémoire. Vous aurez de la chance si vous fouillez pour éviter une erreur de segmentation.
Toutefois, la manière la plus efficace de vérifier la mémoire d'un processus consiste probablement à vider son segment sur le disque. Dans UNIX, cela se fait via un vidage de base. Vous pouvez ensuite le charger dans un débogueur et explorer le contenu de votre cœur, et même le mapper pour corriger les types avec une connaissance suffisante de la pile. Vous pouvez également utiliser un éditeur binaire pour l'examiner de manière non typée - souvent les chaînes sont reconnaissables.
Bonne chance!
Je vous suggère% p au lieu de% d. cela vous donne l'adresse hexadécimale. –
% p est pour 'void *', donc un cast sera nécessaire. BTW la norme ne garantit pas qu'il sera imprimé en hexadécimal. –
Non, mais je n'ai pas encore trébuché sur une implémentation qui ne l'a pas fait. Bien sûr, un compilateur PDP-11 C natif moderne choisirait probablement octal puisque c'était la représentation naturelle pour tout sur un PDP-11. Le dernier compilateur C natif pour le PDP que j'ai utilisé (DECUS C) est trop ancien pour avoir% p, cependant. – RBerteig