L'un des problèmes que vous rencontrez est que vous récupérez une adresse virtuelle, et non l'adresse physique où réside la mémoire. Au prochain démarrage, le mappage ne sera probablement pas le même.
Cela peut certainement être fait dans un module du noyau sous Linux, mais je ne pense pas qu'il existe une sorte d'API dans l'espace utilisateur que vous puissiez utiliser.
Si vous avez la permission (et je suppose que vous pourriez être root sur cette machine si vous la redémarrez), vous pouvez jeter un coup d'œil à /dev/mem pour voir la disposition physique réelle. Peut-être devriez-vous essayer d'échantillonner des valeurs, redémarrer et voir combien de ces valeurs ont persisté.
Il existe un projet similaire où une attaque de démarrage à froid est démontrée. Le code source est disponible, vous pourrez peut-être vous y inspirer.
Cependant, AFAIR ils lisent la mémoire sans charger d'abord un système d'exploitation et n'ont donc pas à se soucier de la protection de la mémoire du système d'exploitation. Peut-être devriez-vous également essayer cela pour éviter que la mémoire ne soit écrasée ou effacée par le système d'exploitation après le démarrage.
(Regardez aussi la vidéo sur le site, c'est assez impressionnant;)