Descrizione di un C ++ Funzione & come esso provoca un buffer overflow

August 2

Descrizione di un C ++ Funzione & come esso provoca un buffer overflow


Buffer overflow in C ++ è causato da alcuni problemi diversi. Spesso, si verifica come parte del funzionamento di una funzione prevista per scrivere una memoria profonda matrice o accesso. In genere, buffer overflow si verifica quando un utente o ingressi programmatore dati nel range di una variabile o una matrice. Le funzioni che tentano di andare al di là di questo intervallo possono anche tentare di cancellare i dati nel sistema, o reindirizzare il sistema eliminando o sovrascrivere le informazioni.

Le funzioni in C ++

Le funzioni in C e C ++ si comportano come previsto, rispetto ad altri linguaggi di programmazione. Funzioni esistono, come qualsiasi altra informazione variabile o di sistema, nella memoria e viene fatto riferimento per indirizzo. Le funzioni, di per sé, sono solo blocchi di codice in memoria a cui fanno riferimento. Qualsiasi errore gettato da un riferimento funzione potrebbe essere dovuto ad una funzione non dichiarata, o una funzione chiamata in modo non corretto. Un errore di buffer overflow sarebbe più probabile venire dal codice all'interno della funzione.

Variabili e Memoria

C ++ è staticamente tipizzato, il che significa che il programmatore deve specificare un tipo di variabile quando si dichiara una variabile. Questo perché C ++ annulla blocchi di memoria di dimensioni determinate in base al tipo di variabile. Una variabile (int) integer dichiarato in un programma otterrà uno spazio in memoria riservata appositamente per un int. Il blocco di memoria sarà la dimensione esatta di un intero.

Array

Gli array sono raccolte di variabili contenute in un unico nome. Ad esempio, l'array di seguito crea un elenco di 10 interi, che può essere letta facendo riferimento un indice (nome [0], nome [1], etc.)

int nome [10];

Invece di un numero intero, l'array imposta da parte abbastanza spazio continuo di 10. Tuttavia, poiché l'accesso indice di matrice può essere tentata su valori oltre ciò che è contenuto nella matrice (nome [11], per esempio), gli errori possono verificarsi se il programmatore fa non guardare come lei usa l'array.

overflow del buffer

A causa della natura di array in C ++, una matrice all'interno di una funzione può essere vittima di buffer overflow. Se un utente inserisce un input di caratteri più grande della gamma in grado di gestire, i caratteri aggiuntivi verranno sovrascritti i dati adiacenti alla matrice in memoria. Per esempio,

Esempio void () {

int login [15];

int i = 0;

while (cin >> a [i]) {

i ++;

}

}

Il ciclo "while" non avrà mai fine, e per il momento "i" raggiunge il 15, l'utente inizia inserendo i dati che sovrascrive la memoria. Questo può avere conseguenze impreviste, come la riassegnazione di una variabile locale, o, in circostanze specifiche, la riscrittura dei puntatori a funzione di riferimento diverso, codice dannoso.