Buffer overflow i C + + er forårsaket av flere ulike problemer. Ofte oppstår det som en del av driften av en funksjon ment å skrive til en matrise eller få tilgang til dyp hukommelse . Vanligvis oppstår buffer overflow når en bruker eller programmerer inn data utenfor rekkevidden til en variabel eller en matrise. Funksjoner som forsøker å gå utover dette området kan også forsøke å slette data i systemet , eller omdirigere systemet ved å slette eller overskrive informasjon. Funksjoner i C + +
Funksjoner i C og C + + oppfører seg som forventet , i forhold til andre programmeringsspråk. Funksjoner eksisterer , som enhver annen variabel eller systeminformasjon , i minnet og blir referert av adresse . Funksjoner , av seg selv, er bare blokker av kode i minnet som det refereres til . Eventuelle feil kastet av en funksjon henvisning kan være på grunn av en undeclared funksjon, eller en funksjon som heter feil. En buffer overflow feil ville mer sannsynlig kommer fra koden inne i funksjonen.
Variabler og Memory
C + + er statisk skrevet, noe som betyr at programmereren må angi en variabel typen når erklære en variabel. Dette skyldes at C + + setter av minneblokker i visse størrelser basert på den variable type. Et heltall ( int ) variabel deklarert i et program vil få en plass i minnet satt av spesielt for en int . Minnet blokken vil være den nøyaktige størrelsen på et heltall.
Arrays
Arrays er samlinger av variabler som inngår i ett navn . For eksempel skaper tabellen nedenfor en liste over 10 heltall , som kan nås ved å referere til en indeks ( navn [ 0 ] , navn [ 1 ] osv. )
int navn [ 10 ];
stedet for ett heltall , setter rekken av nok sammenhengende plass for 10 personer. Men fordi datatabellindekser tilgang kan bli forsøkt på verdier utover det som står i tabellen ( navn [ 11 ] , for eksempel) , kan det oppstå feil hvis programmereren ikke se hvordan hun bruker array.
Buffer Overflow
grunn av innholdet av matriser i C + + , kan en rekke inne i en funksjon bli offer for buffer overflow . Hvis en bruker skriver inn et tegn input større enn matrisen kan håndtere, vil de ekstra tegnene overskrive data i tilknytning til array i minnet. For eksempel , etter
ugyldig eksempel ( ) {
int login [ 15 ];
int i = 0;
while ( CIN >> en [ i] ) {
i + +;
}
}
"mens " loop aldri vil ende , og etter den tid "i" når 15 , vil brukeren begynner å legge inn data som overskriver minne. Dette kan ha utilsiktede konsekvenser , som for eksempel omdisponering av en lokal variabel , eller , i spesielle tilfeller , omskriving av funksjonspekere å referere annerledes, ondsinnet kode .