Buffer overflow em C + + é causada por algumas questões diferentes. Muitas vezes , ocorre como parte da operação de uma função pretendia escrever para uma matriz ou acessar a memória profunda. Normalmente, ocorre estouro de buffer , quando introduz dados que um usuário ou programador além do alcance de uma variável ou uma matriz . Funções que tentam ir além desta faixa também pode tentar apagar os dados no sistema, ou redirecionar o sistema , apagando ou substituindo informações. Funções em C + +
Funções em C e C + + se comporta como esperado, em comparação com outras linguagens de programação. Existem funções , como qualquer outra informação variável ou sistema, na memória e são referenciados por endereço . Funções , por si só, são apenas blocos de código na memória que são referenciados . Qualquer erro lançada por uma referência de função pode ser devido a uma função não declarado , ou uma função chamada incorretamente. Um erro de buffer overflow seria mais provável que venha a partir do código dentro da função .
Variáveis e Memória
C + + é de tipagem estática , o que significa que o programador deve especificar um tipo de variável ao declarar uma variável. Isto é porque C + + anular blocos de memória de determinados tamanhos com base no tipo variável . Uma variável inteira (int ) declarou em um programa vai ter um espaço na memória reservado especificamente para um int . O bloco de memória será o tamanho exato de um inteiro.
Matrizes
Arrays são conjuntos de variáveis contidas em um nome. Por exemplo , a matriz abaixo cria uma lista de 10 números inteiros , que podem ser acessados por referência a um índice ( nome [0] , nome [1] , etc )
int nome [10];
em vez de um número inteiro , a matriz deixa de lado o espaço contínuo suficiente para 10. No entanto, porque o acesso índice da matriz pode ser tentada em valores para além do que está contido no array ( nome [11] , por exemplo) , podem ocorrer erros se o programador não ver como ela usa a matriz .
buffer Overflow
por causa da natureza de matrizes em C + + , uma matriz dentro de uma função pode ser vítima de estouros de buffer. Se um usuário insere uma entrada de caracteres maior do que a matriz pode suportar, os caracteres extras irá substituir os dados adjacentes à matriz na memória. Por exemplo,
exemplo void ( ) { int
de login [15];
int i = 0;
while ( cin >> a [i ] ) {
i + +; }
}
o loop "while" nunca vai acabar , e pelo tempo "i" chega a 15 , o usuário começará a introdução de dados que substitui memória. Isto pode ter consequências inesperadas , como mudança de uma variável local , ou, em circunstâncias específicas , regravação de ponteiros de função de referência diferente, o código malicioso .