Tengo una dirección (es decir, 0x010f73fc) y necesito saber dónde existe esta dirección. ¿Está en la pila o en el montón?
De otra manera, ¿cómo diferenciar entre las direcciones que pertenecen a la pila y las direcciones que pertenecen al montón?
Tengo una dirección (es decir, 0x010f73fc) y necesito saber dónde existe esta dirección. ¿Está en la pila o en el montón?
De otra manera, ¿cómo diferenciar entre las direcciones que pertenecen a la pila y las direcciones que pertenecen al montón?
Como regla general, no se puede saber solo por la dirección. Pero con algún contexto puedes. Mira el registro SP, por ejemplo. La pila y el montón suelen crecer entre sí, por lo que en un entorno de baja presión de memoria, las direcciones deben estar muy separadas.
Realmente no puedes saberlo porque cada hilo tiene su propia pila, y las pilas de hilos son asignado ... en el montón.
Un sistema operativo dado normalmente tendrá un área previamente asignada reservada para la pila del "hilo principal", pero esto depende de la versión exacta del sistema operativo y puede, conceptualmente, moverse de forma aleatoria en cada ejecución. Sin embargo, su depurador, si está adjunto al proceso, debería poder darle la lista de subprocesos que se están ejecutando actualmente y, para cada uno de ellos, su puntero de pila actual, dándole pistas sobre el paradero de todas estas pilas.
Bueno, puede encontrarlo en su sistema en un momento determinado, pero no puede juzgar que en todo momento esa dirección (incluso en su máquina) estará en la pila o montón.
En los días anteriores a ASLR, simplemente podía abrir el programa en un depurador (como inmunidad) y ver a dónde pertenece la dirección, para ese programa en particular. Ahora no es posible incluso para el mismo programa.
Lea otras preguntas en las etiquetas debugging