stringtranslate.com

Corrupción de la memoria

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 . Las causas más probables de corrupción de la memoria son errores de programación (errores de software). Cuando el contenido de la memoria corrupta se utiliza más adelante en ese programa, provoca un fallo del programa o un comportamiento extraño y extraño. Casi el 10% de los fallos de aplicaciones en 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 memoria.

La corrupción de la memoria es una de las clases de errores de programación más difíciles de resolver, por dos razones:

  1. La fuente de la corrupción de la memoria y su manifestación pueden estar muy alejadas, lo que dificulta correlacionar la causa y el efecto.
  2. Los síntomas aparecen en condiciones inusuales, lo que dificulta la reproducción consistente del error.

Los errores de corrupción de memoria se pueden clasificar en términos generales en cuatro categorías:

  1. Uso de memoria no inicializada : el contenido de la memoria no inicializada se trata como valores basura. El uso de dichos valores puede provocar un comportamiento impredecible del programa.
  2. Uso de memoria que no es de propiedad: es común utilizar punteros para acceder y modificar la memoria. Si dicho puntero es un puntero nulo, un puntero colgante (que apunta a la memoria que ya ha sido liberada) o a una ubicación de memoria fuera de los límites actuales de la pila o el montón , se refiere a una memoria que el programa no posee en ese momento. El uso de tales punteros es un error de programación grave. El acceso a dicha memoria suele provocar excepciones en el sistema operativo, que suelen provocar un fallo del programa (a menos que se utilice un software de protección de memoria adecuado).
  3. Usar 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 uno de los defectos de programación más comunes explotados por los virus informáticos y causa graves problemas de seguridad informática (por ejemplo, ataques de retorno a libc , protección contra la destrucción 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.
  4. Gestión defectuosa de la memoria del montón: las pérdidas de memoria y la liberación de memoria que no está en el montón o no asignada son los errores más frecuentes causados ​​por una gestión defectuosa de la memoria del montón.

Muchos depuradores de memoria como Purify , Valgrind , Insure++ , Parasoft C/C++test y AddressSanitizer están disponibles para detectar errores de corrupción de memoria.

Ver también

Referencias

  1. ^ Radich, Q.; Sherer, T.; Sharkey, K.; Batchelor, D.; Kennedy, JT; Mabee, D.; Coulter, D.; Michael, S. (28 de abril de 2021). "Verificador de aplicaciones (libro de recetas de calidad de aplicaciones de Windows 7 y Windows Server 2008 R2): aplicaciones Win32". Red de desarrolladores de Microsoft . Consultado el 9 de febrero de 2022 .

enlaces externos