2011-04-15 14 views
12

Esto podría ser una pregunta duplicada. Me gustaría saber cómo es el mapa de memoria de un proceso de Windows? Estoy buscando detalles. Por favor, proporcione enlaces a blogs, artículos y otra literatura relevante.¿Cómo se ve un mapa de memoria de un proceso de Windows?

+3

El libro de Windows Internals es una buena fuente de información como esta. También puede usar VMMap para ver el diseño de un proceso específico. – Luke

+0

@Luke es una buena sugerencia (VMMap), debe poner eso en una respuesta. Le da una bonita representación codificada por colores del espacio de direcciones. Windows Internals es también una buena sugerencia. –

Respuesta

8

Siempre me gusta ser capaz de ver las cosas, en lugar de solo leer la teoría. Resulta, de acuerdo con this blog post, que si abre un programa usando windbg incluso cuando no está funcionando, aún se asigna a un espacio de direcciones como si fuera. Por lo tanto, la ventana de su desmontaje en sentido figurado (no garantizado para cargar el código en estas direcciones exactas) que muestra lo que está en esas direcciones en términos de código:

WinDbg working

Por supuesto, no se puede garantizar esas direcciones gracias a ASLR, pero te da una idea/te hace pensar: las direcciones de memoria también son solo código. El código y la memoria se almacenan en el mismo espacio (virtual), según la arquitectura Von Neumann que implementan la mayoría de las computadoras modernas. Desafortunadamente también, como no hay pila, montón, etc. no puedes moverte y mirarlos.

Este blog post from Microsoft le ofrece una visión general de alto nivel del espacio de direcciones virtuales. Como puede ver, la mitad está reservada para el sistema operativo y la otra mitad se puede completar con lo que tenga (código, malloc llamadas, asignaciones de pila, etc.).

En términos de cómo funciona el espacio de direcciones en el lado del usuario, this diagram me ayudó a entenderlo. Está vinculado in this question que proporciona una serie de enlaces decentes en cuanto a los diferentes mapas posibles. Sin embargo, recuerde que el diseño en la memoria diferirá en términos de las partes.

El punto importante a recordar es que todo, programa, datos, pila, montón, kernel, es una gran serie secuencial de direcciones de memoria, aunque pueden traducirse o no a direcciones de memoria reales.

Mientras tanto, es posible que también le interese cómo aparece el ejecutable en el disco. This article y this article particularly proporcionan algunos análisis en profundidad del formato de archivo PE. El último artículo también tiene un pequeño diagrama que muestra aproximadamente cómo se mapean los datos.

Cuestiones relacionadas