Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky

Domáce Hardware Siete Programovanie Softvér Otázka Systémy

Popis a C + + funkcie a ako to spôsobuje pretečeniu vyrovnávacej pamäti

pretečeniu vyrovnávacej pamäte v C + + je spôsobená niekoľkých rôznych otázok . Často sa vyskytuje ako súčasť prevádzky funkcie určené na zápis do poľa , alebo prístup k hlbokej pamäti . Obvykle dôjde k pretečeniu vyrovnávacej pamäti , keď užívateľ alebo programátor vstupy dát mimo rozsah ukazovateľa alebo pole . Funkcie , ktoré sa snažia ísť nad rámec tohto rozsahu sa môžu tiež pokúsiť vymazať dáta v systéme , alebo presmerovať systému odstránením alebo prepísaním informácie . Funkcie v C + +

funkcie v C a C + + sa správajú , ako sa očakávalo , v porovnaní s inými programovacími jazykmi . Funkcie existujú , rovnako ako akékoľvek iné premenné alebo systémové informácie v pamäti a sú odvolával sa na základe adresy . Funkcie , ktoré samy o sebe , sú len bloky kódu v pamäti , ktoré sú uvedené . Akákoľvek chyba vyvolaná odkazom funkcia môže byť v dôsledku nelegálnej funkcie , alebo funkcie nazýva nesprávne . Chyba pretečenia bufferu by s väčšou pravdepodobnosťou pochádzajú z kódu vnútri funkcie .
Premenné a pamäti

C + + je staticky napísaný , čo znamená , že programátor musí špecifikovať typ premennej pri deklarovaní premennej . To je preto , že C + + zruší pamäťových blokov určitej veľkosti na základe premennej typu . Číslo ( int ) premenná deklarovaná v programe dostanú priestor v pamäti zrušil špeciálne pre int . Blok pamäte bude presná veľkosť celé číslo .
Pole

polia sú kolekcie premenných obsiahnutých v jedno meno . Napríklad , pod pole vytvorí zoznam 10 čísel , ktoré sú prístupné pomocou odkazu index ( názov [ 0 ] , názov [ 1 ] , atď )

int názov [ 10 ] ;

Namiesto jednej celé číslo , pole vyčleňuje dostatok kontinuálne priestor pre 10. Avšak, pretože prístup index poľa môže byť pokus o hodnotách nad rámec toho , čo je obsiahnuté v poli ( meno [ 11 ] , napríklad ) , môže dôjsť k chybám , ak programátor nie je sledovať , ako sa používa pole .

Buffer Overflow

Vzhľadom na povahu polí v C + + , pole vnútri funkcie môže obetí pretečeniu vyrovnávacej pamäti . Ak užívateľ zadá znak vstup väčší ako pole môžete zvládnuť , budú nadbytočné znaky prepísať dáta , priľahlé k poľu v pamäti . Napríklad ,

void Príklad ( ) { int

login [ 15 ] ;

int i = 0 ;

while ( cin >> [ i ] ) {

i + + ;

}

}

" , zatiaľ čo " loop nikdy neskončí , a v čase, keď " i " dosiahne 15 , sa používateľ spustiť vkladanie dát , ktorý prepíše pamäť . To môže mať nezamýšľané dôsledky , ako je napríklad preradenie lokálne premenné , alebo , za určitých okolností , prepisovanie funkčných ukazovateľov na odkazujú na iný , škodlivý kód .

Najnovšie články

Copyright © počítačové znalosti Všetky práva vyhradené