Buffer overflow i C + + orsakas av några olika frågor . Ofta sker det som en del av driften av en funktion är avsedd för att skriva till en array eller komma djupt minne . Vanligtvis uppstår buffer overflow när en användare eller programmerare ingångar som faller utanför räckvidden för en variabel eller en matris . Funktioner som försöker gå utanför detta område kan också försöka att radera uppgifter i systemet , eller omdirigera systemet genom att ta bort eller skriva över informationen . Funktioner i C + +
funktioner i C och C + + beter sig som förväntat , jämfört med andra programmeringsspråk . Funktioner existera , precis som alla andra variabel eller systeminformation , i minnet och refereras av adress . Funktioner , av sig själva , är bara block av kod i minnet som refereras . Eventuella fel som kastas av en funktion referens kan bero på en odeklarerat funktion eller en funktion som kallas felaktigt . En buffer overflow error skulle mer sannolikt komma från koden inuti funktionen .
Variabler och Memory
C + + är statiskt skrivit , vilket innebär att programmeraren måste ange en variabel typ när du deklarerar en variabel . Detta beror på C + + avsätter minne block av vissa storlekar baserade på den variabla typen. Ett heltal ( int ) variabel som deklareras i ett program kommer att få en plats i minnet avsatt specifikt för en int . Minnet blocket blir den exakta storleken på ett heltal .
Matriser
Arrayer är samlingar av variabler som ingår i ett namn . Exempelvis skapar arrayen nedan en lista på 10 heltal , som kan nås genom att referera ett index ( namn [ 0 ] , namn [ 1 ] , etc. ) katalog
int namn [ 10 ] ;
stället för ett heltal , sätter array avsätta tillräckligt sammanhängande utrymme för 10 . Men eftersom fältindex tillgång kan prövas på värden utöver vad som finns i arrayen ( namn [ 11 ] , till exempel ) , kan fel uppstå om programmeraren inte se hur hon använder arrayen .
Buffer Overflow
grund av arten av arrayer i C + + , kan en array inuti en funktion falla offer för buffertspill . Om användaren anger en teckeninmatning större än arrayen kan hantera, kommer extra tecken skriva över data som angränsande till matrisen i minnet. Till exempel ,
void Exempel ( ) {
int inloggning [ 15 ] ;
int i = 0 ;
while ( cin >> a [ i] ) {
i + + ;
}
}
" medan " loop aldrig kommer att sluta , och när " jag " når 15 , kommer användaren börja mata in data som skriver över minnet . Detta kan få oavsiktliga konsekvenser, såsom omplacering av en lokal variabel , eller , under särskilda omständigheter , omskrivning av funktionspekare att referera annorlunda , skadlig kod . Addera