He intentado buscar esta pregunta, tal vez porque es obvio y he echado un vistazo a Wikipedia y OWASP
¿Los desbordamientos de búfer solo se producen cuando se desborda el tamaño de la matriz o se pueden desbordar de búfer otras cosas?
Los desbordamientos de búfer se producen en, sin sorpresa, buffers.
Un búfer es una secuencia de datos. Puede o no tener un tipo continuo distinto. En algunos sistemas ni siquiera puede consistir en bytes. En el supuesto de que tenga una longitud máxima (o al menos una esperada), puede ocurrir una condición en la que el tamaño de los datos que ingresan al búfer excede su longitud máxima, lo que lleva a un desbordamiento (es decir, copia más allá de los límites). Esto puede ocurrir debido a que el búfer tiene una longitud fija y los datos copiados son mayores que esa longitud, o debido a un error en el manejo de la asignación de memoria dinámica en el caso de un búfer de longitud variable.
Técnicamente el búfer puede ser de cualquier tipo. Por ejemplo, memcpy'ing un int (32 bits) en un tipo de datos corto (16 bits) es un desbordamiento de búfer - el búfer tenía un tamaño de 16 bits y le copiamos 32 bits, por lo que desbordamos datos en los siguientes 16 bits después del búfer de destino.
La razón por la que generalmente hablamos de arreglos es que son el tipo de datos más común para ver en un contexto de desbordamiento de búfer, asumiendo que considera que una cadena es un tipo de arreglo (por ejemplo, char*
, que es un puntero para cualquier número de char
instancias). En la mayoría de los casos, vas a estar lidiando con un caso así, por lo que tiene sentido discutir las cosas en términos de arreglos porque es un ejemplo concreto de programación.
Lea otras preguntas en las etiquetas buffer-overflow