Tecnología

Inicio

Descripción de una función C ++ y Como provoca un desbordamiento de búfer

Descripción de una función C ++ y Como provoca un desbordamiento de búfer


Desbordamiento de búfer en C ++ es causada por algunos problemas diferentes. A menudo, se produce como parte de la operación de una función destinada a escribir en una memoria profunda matriz o de acceso. Por lo general, el desbordamiento de búfer se produce cuando un usuario o programador entradas de datos más allá del rango de una variable o una matriz. Las funciones que tratan de ir más allá de este rango también pueden intentar borrar los datos en el sistema, o redirigir el sistema mediante la eliminación o la sobreescritura de la información.

Funciones en C ++

Las funciones en C y C ++ se comportan como se espera, en comparación con otros lenguajes de programación. Existen funciones, como cualquier otra información variable o sistema, en la memoria y son referenciados por la dirección. Funciones, por sí mismos, son sólo bloques de código en la memoria que se hace referencia. Cualquier error lanzada por un referencia de función podría ser debido a una función no declarado, o una función llamada incorrectamente. Un error de desbordamiento de memoria intermedia sería más probable es que vienen a partir del código dentro de la función.

Las variables y memoria

C ++ es de tipo estático, lo que significa que el programador debe especificar un tipo de variable cuando se declara una variable. Esto es debido a que C ++ deja a un lado los bloques de memoria de ciertos tamaños en función del tipo de variable. Un (int) variable entera declaró en un programa obtendrá un espacio de memoria reservada específicamente para un int. El bloque de memoria será el tamaño exacto de un número entero.

Las matrices

Las matrices son conjuntos de variables contenidas en un solo nombre. Por ejemplo, la matriz a continuación crea una lista de 10 números enteros, que se puede acceder por referencia a un índice (nombre [0], el nombre de [1], etc.)

int nombre [10];

En lugar de un número entero, la matriz establece un lado suficiente espacio continuo de 10. Sin embargo, dado que el acceso índice de matriz puede intentarse en los valores más allá de lo que está contenido en la matriz (nombre [11], por ejemplo), los errores pueden ocurrir si el programador hace no ver cómo se utiliza la matriz.

Desbordamiento de búfer

Debido a la naturaleza de las matrices en C ++, una matriz dentro de una función puede ser víctima de desbordamiento de memoria intermedia. Si un usuario introduce una entrada de caracteres más grande que la matriz puede manejar, los caracteres adicionales sobrescribirán los datos adyacentes a la matriz en la memoria. Por ejemplo,

ejemplo void () {

int entrada [15];

int i = 0;

mientras que (cin >> a [i]) {

i ++;

}

}

El bucle "while" nunca va a terminar, y para el momento "i" llega a 15, el usuario comenzará a introducir datos que sobrescribe la memoria. Esto puede tener consecuencias no deseadas, tales como la reasignación de una variable local, o, en circunstancias específicas, la reescritura de los punteros de función para hacer referencia a diferentes códigos, malicioso.