tierra tallo suelo raíz raíces raiz raices que porque por llama las hacia geotropismo fenómeno cómo cual crecen crece como arriba abajo security architecture x86 stack cpu

security - tallo - porque las raices crecen hacia abajo



¿Por qué las pilas no crecen hacia arriba(por seguridad)? (4)

Bueno, no sé si la dirección de crecimiento de la pila tendría mucho efecto en la seguridad, pero si observa la arquitectura de la máquina, aumentar la pila en la dirección de dirección negativa realmente simplifica las convenciones de llamada, los punteros de trama de pila, la asignación de variables locales, etc. etc.

Esto está relacionado con la pregunta "¿Por qué las pilas normalmente crecen hacia abajo?" , pero más desde un punto de vista de seguridad. Generalmente me refiero a x86.

Me parece extraño que la pila crezca hacia abajo, cuando los buffers normalmente se escriben hacia arriba en la memoria. Por ejemplo, una cadena de C ++ típica tiene su final en una dirección de memoria más alta que el principio.

Esto significa que si hay un desbordamiento de búfer, se está sobrescribiendo en la pila de llamadas, lo que entiendo es un riesgo de seguridad, ya que abre la posibilidad de cambiar las direcciones de retorno y los contenidos de las variables locales.

Si la pila creciera hacia arriba en la memoria, ¿los desbordamientos de búfer no se ejecutarían simplemente en memoria muerta? ¿Mejoraría esto la seguridad? Si es así, ¿por qué no se ha hecho? ¿Qué pasa con x64, esas pilas crecen hacia arriba y si no, por qué no?


La arquitectura para el 8088 (inicio de la familia x86) usó una pila que creció hacia abajo, y por compatibilidad ha sido así desde entonces. En aquel entonces, las vulnerabilidades de desbordamiento del búfer (en los 80) en las computadoras de la casa estaban fuera del radar.

Sin embargo, no podría decir por qué eligieron hacerlo crecer, cuando parece más intuitivo hacerlo crecer. Como se ha mencionado, sin embargo, la memoria a menudo se dividía entre pila y pila; tal vez el diseñador de la CPU pensó que era importante que el montón creciera, por lo que la pila creció como consecuencia.


Probablemente porque la arquitectura para la mayoría de las CPU se diseñó en una época en que los hombres eran hombres, y usted podría confiar en que sus programadores no querrían robar los números de las tarjetas de crédito de las personas ... es casi demasiado tarde para cambiar ahora (aunque, como usted dice, probablemente podría hacerse para nuevas arquitecturas como Itanium que en realidad tiene dos pilas !)


Técnicamente, esto depende del sistema operativo / CPU, pero normalmente esto se debe a que la pila y el montón crecen en direcciones opuestas y desde los extremos opuestos del espacio de direcciones.

Esta disposición le brinda la mayor flexibilidad para dividir / asignar memoria entre el montón y la pila sin hacer que entren en conflicto. Si ambos crecieran en la misma dirección, entonces necesitaría tener una dirección de inicio para la pila que pusiera un límite estricto al tamaño máximo del montón (y un límite rígido al tamaño de la pila)

ETA:

Encontré un artículo interesante en wikipedia sobre por qué hacer que una pila crezca hacia arriba no necesariamente evita los desbordamientos de pila, sino que hace que funcionen de forma un poco diferente.