Un problema que tiene es que obtiene una dirección virtual, no la dirección física donde reside la memoria. La próxima vez que inicie, la asignación probablemente no será la misma.
Esto definitivamente se puede hacer dentro de un módulo kernel en Linux, pero no creo que haya ningún tipo de API en el espacio de usuario que pueda usar.
Si tiene permiso (y supongo que podría ser root en esta máquina si la está reiniciando), entonces puede echar un vistazo a /dev/mem para ver el diseño físico real. Tal vez debería probar valores de muestreo, reiniciar y ver cuántos de esos valores persistieron.
Hay un proyecto similar donde se demuestra un ataque de arranque en frío. El código fuente está disponible, tal vez pueda inspirarse allí.
Sin embargo, AFAIR leen la memoria sin cargar un sistema operativo primero y, por lo tanto, no tienen que meterse con la protección de la memoria del sistema operativo. Tal vez debería probar esto también para evitar que el sistema operativo sobrescriba o borre la memoria después del arranque.
(Mira también el video en el sitio, es bastante impresionante;)