La corrupción de la memoria ocurre en un programa de computadora cuando el contenido de una ubicación de la memoria se modifica debido a un comportamiento programático que excede la intención del programador original o las construcciones del programa / lenguaje; esto se denomina violación de la seguridad de la memoria . La causa más probable de corrupción de la memoria es un error de programación. Cuando el contenido de la memoria dañada se usa más adelante en ese programa, esto provoca que el programa se bloquee o que se produzca un comportamiento extraño y extraño. Casi el 10% de los bloqueos de aplicaciones en los sistemas Windows se deben a daños en el montón . [1]
Los lenguajes de programación modernos como C y C ++ tienen potentes funciones de gestión de memoria explícita y aritmética de punteros . Estas características están diseñadas para desarrollar aplicaciones y software de sistema eficientes. Sin embargo, el uso incorrecto de estas funciones puede provocar errores de corrupción de la memoria.
La corrupción de la memoria es una de las clases de errores de programación más intratables, por dos razones:
- La fuente de la corrupción de la memoria y su manifestación pueden estar muy alejadas, lo que dificulta la correlación entre la causa y el efecto.
- Los síntomas aparecen en condiciones inusuales, lo que dificulta la reproducción constante del error.
Los errores de corrupción de memoria se pueden clasificar en cuatro categorías:
- Uso de memoria no inicializada : el contenido de la memoria no inicializada se trata como valores basura. El uso de estos valores puede provocar un comportamiento impredecible del programa.
- Uso de memoria que no es de propiedad: es común usar punteros para acceder y modificar la memoria. Si dicho puntero es un puntero nulo, un puntero colgante (que apunta a la memoria que ya se ha liberado) oa una ubicación de la memoria fuera de la pila actual o los límites de la pila , se refiere a la memoria que el programa no posee en ese momento. El uso de tales punteros es una falla de programación grave. El acceso a dicha memoria suele provocar excepciones en el sistema operativo, que suelen provocar un bloqueo del programa (a menos que se utilice un software de protección de memoria adecuado).
- Uso de memoria más allá de la memoria asignada ( desbordamiento del búfer ): si se usa una matriz en un bucle, con una condición de terminación incorrecta, la memoria más allá de los límites de la matriz puede manipularse accidentalmente. El desbordamiento del búfer es una de las fallas de programación más comunes que explotan los virus informáticos, lo que provoca graves problemas de seguridad informática (p. Ej. , Ataque de retorno a libc , protección contra la rotura de pilas ) en programas ampliamente utilizados. En algunos casos, los programas también pueden acceder incorrectamente a la memoria antes del inicio de un búfer.
- Gestión de memoria de pila defectuosa: las pérdidas de memoria y la liberación de memoria no asignada o no asignada son los errores más frecuentes causados por una gestión de memoria de pila defectuosa.
Muchos depuradores de memoria como Purify , Valgrind , Insure ++ , Parasoft C / C ++ test , AddressSanitizer están disponibles para detectar errores de corrupción de memoria.
Ver también
Referencias
- ^ "Verificador de aplicaciones" . Biblioteca de MSDN . Microsoft. 19 de abril de 2011 . Consultado el 4 de mayo de 2011 .
enlaces externos
- Tutorial de corrupción de memoria Una introducción a las técnicas de explotación y los mecanismos de protección