Si la expansión de los datos o la pila de usuario
agota la memoria disponible
entonces
el proceso se bloquea y se reprograma para
correr de nuevo con un espacio de memoria más grande
Smashing The Stack For Fun And Profit
Búsqueda de desbordamiento de buffer
el uso de un bucle while
para
leer un carácter a la vez en un buffer de la entrada estándar
o
para leer algún archivo hasta que se alcanza el final de la línea, el final del archivo
con algún otro delimitador
lo cual
lleva a que si no hay controles explícitos para desbordamientos en el bucle while
estos programas son fácilmente explotados
Si el destino de cualquiera de estas funciones es un buffer de tamaño estático
su otro argumento fuera alguna derivada de la entrada del usuario
no
es una buena
posibilidad de que se pueda explotar, o mejor dicho, prevenir un desbordamiento de buffer
Un desbordamiento de buffer es el resultado de relleno de más datos en un buffer de los
que puede manejar
El problema que se enfrenta al tratarse del desbordamiento del buffer
es
tratar de averiguar en qué dirección de la memoria intermedia será
por lo tanto conociendo
donde la pila comienza, podemos tratar de adivinar dónde el buffer se desbordará
esto
permite cambiar el flujo de ejecución del programa
nos permite cambiar la dirección de retorno de una función
El pisado de pila o stack smashing
es un
tipo de desbordamiento de buffer que es aprovechado
por
otros programas maliciosos
y
algunos virus
Una pila es un bloque contiguo de datos de memoria que contiene
Además del puntero de pila, lo que apunta a la parte superior de la pila
(bajo dirección numérica) a menudo es un puntero de marco (FP)
apunta a un lugar fijo dentro de un marco
que también
se utiliza para asignar dinámicamente las variables locales utilizadas en
funciones
un puntero de pila (SP)
que
apunta a la parte superior de la pila
Un registro de llamada
Todo proceso se divide en 3 regiones
Pila
Tiene la propiedad de que el último objeto colocado en la pila
será el primer objeto eliminado.
A esta propiedad se le conoce como LIFO
Es un tipo abstracto de datos de uso frecuente en la informática.
Datos
La región de datos contiene
datos no inicializados
datos inicializados
Texto
La región de texto se fija por el programa e incluye código (instrucciones)
de datos y de sólo lectura.
incluye
código (instrucciones)
de
sólo lectura
datos