Muchas herramientas de análisis buscan estructuras de datos conocidas (es decir, patrones) en la memoria que indican un tipo particular de información.
Por ejemplo, la memoria malloc'd tiene datos de encabezado (y, a veces, final) que apuntan hacia adelante y hacia atrás en la memoria hacia la memoria adyacente. Los punteros de memoria de Free'd pueden saltar en la memoria si no están consolidados / fusionados.
Las aplicaciones de Windows C ++ tienen la noción de clases y un puntero "this", que apunta a una clase. La estructura de las clases de C ++ es conocida, por lo que cuando se encuentra uno de estos indicadores, se puede derivar una gran cantidad de información sobre la clase. Si se trata de una clase / tipo de datos conocidos, puede analizarse con relativa facilidad.
Los archivos abiertos en la memoria pueden ser descubiertos por sus "firmas de archivos" (generalmente los primeros 3 o más bytes del archivo). Si se encuentran, se puede hacer un análisis rápido para determinar si en realidad es un archivo legítimo de ese tipo o si fue una suerte que se hayan producido esos bytes.
Entonces, en general, muchas herramientas de análisis de memoria buscan patrones conocidos en la memoria y / o se enganchan en estructuras de datos clave dentro del kernel y luego analizan la memoria desde allí. Una vez que encuentre áreas de código, puede "desensamblarlas" y buscar referencias (punteros) a otras regiones de la memoria. Y siguiendo esas puedes encontrar otras estructuras de datos.
Espero que ayude a algunos.