O que é um estouro de buffer?
Um estouro de buffer ocorre quando um programa está tentando gravar em um buffer e sai de seus limites, resultando na gravação de informações do programa na memória que potencialmente pertence a outro programa. Isso viola a integridade da memória no sistema operacional, resultando em um erro grave e em uma possível falha no programa em execução. O principal perigo de um estouro de buffer vem de dois elementos principais. Primeiro, as informações gravadas fora do buffer são ostensivamente "perdidas", pois o mapa de memória do computador - sua lista de locais de memória - não pode ser responsável por isso. Segundo, um estouro de buffer pode substituir acidentalmente as informações armazenadas na memória de outro programa, interferindo efetivamente na execução de outro programa.
Um "buffer" é uma região da memória usada como um local de armazenamento temporário enquanto o computador está transferindo informações de um ponto para outro. O uso mais comum de um buffer é geralmente na reprodução de vídeo ou áudio, em que o computador registra X segundos adicionais de gravação ou áudio na memória, garantindo que a reprodução não seja interrompida se algo der errado temporariamente no sistema. Um buffer existe apenas dentro de um local predeterminado específico na memória do computador, assim como um país existe apenas dentro das linhas de contorno desenhadas em um mapa. Sair dessas "linhas" virtuais resulta em problemas não apenas para o programa em execução, mas para outros programas no sistema.
Essencialmente, o programa saiu de sua jurisdição designada e invadiu o espaço de outro programa de trabalho. Quando isso acontece, as informações gravadas fora do buffer caem efetivamente do mapa do computador; em outras palavras, o sistema não tem mais como recuperá-lo. Como o computador "sabe" apenas procurar informações em buffer dentro do espaço de buffer específico alocado na memória, ele não tem como descobrir para onde foram as informações excedentes.
Além disso, um estouro de buffer pode interromper outros programas em execução no computador. Imagine que o espaço de armazenamento de memória em ambos os lados do buffer já tenha sido atribuído a outros programas em execução. Quando as informações no buffer ultrapassarem a área projetada, elas substituirão e danificarão as informações já armazenadas nessas seções da memória. Portanto, um estouro de buffer é um problema que pode prejudicar a eficácia de um programa adjacente, além de danificar sua própria operação.