¿Qué es el desbordamiento de pila?
¿Qué son el desbordamiento de pila y el desbordamiento de montón?
Vayamos al grano
int f(int x)
{
int a[10];
a [bl1] = x;
}
Este es un desbordamiento de pila, x se escribe en un lugar donde no debería escribirse. En un modo de compilación específico, el contenido de x sobrescribirá la dirección de retorno original de f. Es decir, la función f que se suponía que regresaría a la ubicación de llamada regresa a la ubicación señalada por x. Normalmente el programa fallará en este punto. Pero si x apunta intencionalmente a un fragmento de código malicioso, el código malicioso se ejecutará.
El desbordamiento del montón es relativamente complicado porque la implementación del montón en varios entornos no es exactamente la misma. Pero el montón de gestión del programa debe tener datos adicionales para marcar información diversa sobre el montón. Si la asignación anterior ocurre en la memoria del montón, puede destruir la estructura lógica del montón. y luego modificar datos que originalmente eran inaccesibles.
int f(char *s, int n)
{
char a[10];
memcpy(a, s) , n);
...
}
Este es un ejemplo más realista de desbordamiento de pila si la longitud de los datos entrantes es mayor que 10. , provocará un desbordamiento y cambiará así la dirección de retorno de f. Siempre que se escriba código malicioso en una dirección específica de antemano, el código se ejecutará.
Una situación en la que el desbordamiento del montón ejecuta código malicioso es destruir la estructura del montón a través de datos excesivamente largos, de modo que la siguiente aplicación pueda obtener la ubicación donde se guardan ciertos punteros de función y luego modificarla.
Una de las características únicas del desbordamiento de pila y montón es que terceros pueden lograr intrusiones a nivel de código completamente proporcionando datos específicos. Si juegas, sabrás que el crack PSP3000 utiliza una vulnerabilidad de desbordamiento cuando el sistema PSP muestra archivos tiff. El archivo tiff contiene un fragmento de código de intrusión. Este código también se cargará cuando se cargue el archivo tiff, pero no se puede ejecutar en este momento. Sin embargo, parte de los datos del tiff es demasiado larga y la parte demasiado larga contiene la ubicación del código de intrusión. Cuando el sistema lea esta parte de los datos, se ejecutará el código intrusivo.
¿Qué significa desbordamiento de pila?
El desbordamiento de pila significa que se escriben demasiados datos en el bloque de datos independientemente del tamaño del bloque de datos local asignado en la pila, lo que provoca que los datos se pierdan. para salirse de los límites y el resultado se sobrescribirá. Se ha eliminado el recuento de pila anterior. O puede interpretarse como incrustar un fragmento de código en una cadena larga y sobrescribir la dirección de retorno del proceso con la dirección de este código, de modo que cuando el proceso regrese, el programa comenzará a ejecutar este código autoescrito.
¿Qué significa (desbordamiento de pila, ubicación: línea 37) cuando aparece en la pantalla de la computadora?
zhidao.baidu/...iST4BK
¿Alguien ¿Conoce los detalles? Respuesta
¿Cuáles son las causas comunes del desbordamiento de pila?
En circunstancias normales, los datos de lectura y escritura exceden el rango de la memoria aplicada.
El desbordamiento de pila generalmente informa un error de segmentación
¿Qué significa la primera línea del desbordamiento de pila cuando aparece una ventana en la computadora?
Como dice el refrán, El desbordamiento de pila se refiere al desbordamiento de la pila. Utilice la función malloc(); para asignar dinámicamente espacio en el área del montón de memoria. Si los programas normales no utilizan esto, no habrá desbordamiento del montón. Desbordamiento de pila: el espacio de la pila está preestablecido y generalmente se usa para almacenar variables temporales. Si define una variable local dentro de una función y el espacio excede el tamaño del espacio de pila establecido, se desbordará.
No solo eso, si hay demasiadas funciones anidadas, también se producirá un desbordamiento de la pila, porque las variables ocupadas por la función no se liberarán antes de que finalice la función, ocupando espacio en la pila. Solución: establezca el tamaño del espacio de la pila de forma adecuada. Analice el código y evalúe qué enlace utiliza la mayor cantidad de bytes de variables temporales. El espacio de pila establecido debe ser mayor que esto. También puedes definir variables grandes globalmente, para que no ocupen espacio en la pila.
Puedo preguntar: ¿Qué significa desbordamiento de pila? ¿Cómo afrontarlo?
El desbordamiento de pila significa que se escriben demasiados datos en el bloque de datos independientemente del tamaño del bloque de datos local asignado en la pila, lo que hace que los datos se salgan de los límites y sobrescriban los datos antiguos de la pila. ¡Es sólo que hay demasiadas palabras!
¿Qué significa desbordamiento de pila?
El bloque de memoria asignado al proceso de su programa por el sistema operativo no puede cumplir con los requisitos de su programa
Recursión 1001 demasiado profunda ; ¿Qué significa desbordamiento de pila?
1001 La recursión se llama repetidamente, intercambiando espacio por tiempo. Si recurre demasiadas veces, la sobrecarga de memoria será demasiado alta, por lo que se informará un error. se puede resolver sin recursividad.
¿Cuáles son las causas comunes del desbordamiento de la pila?
Los recursos basura no se reciclan.
¿Cuáles son las causas comunes del desbordamiento de la pila?
La memoria solicitada no es suficiente. La memoria solicitada se ha agotado, pero todavía se están colocando datos en ella.