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?
Respuesta
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:
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.
- 1. Mapa de memoria de proceso (Linux Windows)
- 2. diseño de memoria de proceso de Windows
- 3. ¿Cómo se ve un objeto en la memoria?
- 4. ¿Cómo crear un volcado de memoria de un proceso en Windows Server 2003?
- 5. ¿Uso de memoria de un proceso hijo?
- 6. Existe un límite de memoria para un solo proceso .NET
- 7. Memoria de volcado de un proceso
- 8. hibernación de un único proceso en Windows
- 9. ¿Cómo puede un servicio de Windows iniciar un proceso cuando se produce un evento de temporizador?
- 10. ¿Cómo se ve un Data Mapper?
- 11. ¿Cómo se ve un branchless en C++?
- 12. Memoria máxima. Un proceso .NET puede asignar
- 13. ¿cómo se ve un twitter/verify_credentials?
- 14. ¿Cómo puedo asignar más de 2GB de memoria a un proceso en Windows?
- 15. ¿Cómo se ve un servicio web Node.js?
- 16. ¿Cómo se ve un encabezado zlib?
- 17. Detección de problema de fragmentación de memoria en un proceso
- 18. ¿Ejecuta un proceso desde la memoria dentro de otro proceso?
- 19. ¿Cuándo Windows señala un identificador de proceso?
- 20. Iniciar un proceso con credenciales de un servicio de Windows
- 21. ¿Cómo estructurar el mapa de memoria en un emulador N64?
- 22. ¿cómo busco toda la memoria de un proceso en gdb?
- 23. cómo obtener un proceso de memoria hijo en node.js?
- 24. Error de memoria insuficiente al cargar un mapa de bits
- 25. Cuánta memoria está bloqueada en un proceso
- 26. Límite de memoria de proceso del proceso de 64 bits
- 27. Cómo retrasar el proceso de inicio de sesión de Windows hasta un servicio de Windows
- 28. ¿Cómo se conecta un antivirus de Windows al proceso de acceso al archivo?
- 29. ¿Cuáles son las mejores prácticas cuando se ejecuta un proceso como un servicio de Windows?
- 30. ¿Cómo serializar un mapa de un mapa con GSON?
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
@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. –