2010-11-11 9 views
1

Je veux juste lire la mémoire du système, pas la mémoire allouée pour d'autres processus, juste de la mémoire libre. Je essayé allouer énorme mémoire à l'aide malloc:comment scanner la mémoire du système par programme?

char *ptr; 
ptr = (char*)malloc((1024*1024*700)*sizeof(char)); 

J'ai essayé d'imprimer, mais il est l'impression du caractère nul (à savoir rien). J'ai donc casté son type en int, pensant qu'il pourrait en imprimer l'ASCII.

printf("",(int)ptr[i]); 

Toutes les valeurs sont imprimées 0.

malloc n'initialise pas la mémoire allouée, non? Je ne pouvais pas imprimer la mémoire.

Je l'ai essayé dans Linux, Fedora 14, avec les dernières gcc et windows xp avec dev-C++

Je veux juste accéder à la mémoire. Est-ce possible via un noyau pgm sous Linux en utilisant l'adresse et en récupérer la date? Pouvez-vous suggérer quelques outils pour lire le bélier?

+0

Par mémoire système, vous voulez dire la RAM? – Naveen

+1

La question est: pourquoi? – Ashe

+0

Sketchiness mis à part, travaillez-vous dans l'espace utilisateur ou dans le noyau? –

Répondre

2

En ce qui concerne:

la mémoire du système, et non pas la mémoire allouée à d'autres processus, juste mémoire libre

Sur un système d'exploitation moderne, cela n'a pas vraiment de sens, comme toute la mémoire est virtuel. Comme caf a dit que vous pouvez essayer de numériser /proc/mem (en tant que root), mais cela vous donnerait toute la mémoire physique (y compris la mémoire physique qui contient actuellement les données des autres processus) et manquerait les données qui ont été échangées sur le disque ou conservées par autre support que la mémoire physique. Peut-être que si vous clarifiez ce que vous voulez obtenir, vous obtiendrez de meilleures réponses.

7

Il est vrai que malloc() lui-même n'a pas la mémoire initialiser, mais le système d'exploitation ne désinfectez généralement la mémoire, il remet votre processus lorsqu'il demande plus. Ceci est une mesure de sécurité.

Si vous souhaitez lire directement la mémoire physique, vous pouvez le faire en ouvrant /dev/mem et en mappant la partie d'intérêt en utilisant mmap(). Les autorisations sur /dev/mem limitent généralement cet accès à root.

Questions connexes