Si está utilizando un procesador con una unidad de gestión de memoria el hardware puede hacer esto para usted con sobrecarga de software mínimo. La mayoría de los procesadores modernos de 32 bits los tienen y más y más microcontroladores de 32 bits los incluyen también.
Configure un área de memoria en la MMU que se utilizará para la pila. Debe estar delimitado por dos áreas de memoria donde la MMU no permite el acceso. Cuando su aplicación se esté ejecutando, recibirá una excepción/interrupción tan pronto como desborde la pila.
Dado que se produce una excepción en el momento en que ocurre el error, usted sabe exactamente en qué parte de la aplicación la pila se dañó. Puedes ver la pila de llamadas para ver exactamente cómo llegaste a donde estás. Esto hace que sea mucho más fácil encontrar su problema que tratar de descubrir cuál es el problema al detectar su problema mucho después de que sucedió.
Lo he usado con éxito en los procesadores PPC y AVR32. Cuando empiezas a utilizar una MMU, sientes que es una pérdida de tiempo porque te llevaste bien sin ella durante muchos años, pero una vez que ves las ventajas de una excepción en el lugar exacto donde ocurre tu problema de memoria, nunca volverás. Una MMU también puede detectar cero accesos al puntero si no permite el acceso a la memoria al parque inferior de su ram.
Si está utilizando un RTOS su MMU protege la memoria y las pilas de otras tareas los errores en una tarea no deberían afectarlos.Esto significa que también podría reiniciar fácilmente su tarea sin afectar las otras tareas.
Además de esto, un procesador con una MMU generalmente también tiene mucho RAM, su programa tiene muchas menos probabilidades de desbordar su pila y no necesita ajustar todo para lograr que su aplicación se ejecute correctamente con una pequeña huella de memoria.
Una alternativa a esto sería utilizar las funciones de depuración del procesador para provocar una interrupción en el acceso a la memoria al final de la pila. Esto probablemente será muy específico del procesador.
¿Qué procesador integrado, específicamente? Realmente no existe una solución genérica que todos los procesadores implementen de la misma manera, ya que cada uno es bastante diferente. –
Alrogitmo o técnica independiente del procesador. La técnica utilizada por un hacker en el entorno de la PC, se puede aplicar jugando con punteros y bloqueando su sistema en un sw incrustado. Describe cómo proteger la dirección de retorno en su área de pila ... –
¿Por desbordamiento de pila se entiende cuando la pila de memoria se agota por una pila de llamadas demasiado grande? p.ej. una función recursiva demasiados niveles profundos? La protección de las direcciones de retorno se trata más de prevenir desbordamientos de búfer en la pila que "desbordamientos de pila". –