Minneskorruption - Memory corruption

Minneskorruption inträffar i ett datorprogram när innehållet på en minnesplats ändras på grund av programmatiskt beteende som överskrider avsikten med den ursprungliga programmeraren eller program / språkkonstruktioner; detta benämns kränker minnesäkerheten . Den mest troliga orsaken till minneskorruption är programmeringsfel. När det skadade minnesinnehållet används senare i det programmet leder det antingen till programkrasch eller till konstigt och bisarr programbeteende. Nästan 10% av programkrasch på Windows-system beror på hög korruption.

Moderna programmeringsspråk som C och C ++ har kraftfulla funktioner för uttrycklig minneshantering och pekar aritmetik . Dessa funktioner är utformade för att utveckla effektiva applikationer och systemprogramvara. Att använda dessa funktioner på fel sätt kan dock leda till fel i minneskorruption.

Minneskorruption är en av de mest ointrängliga klassen av programmeringsfel av två skäl:

  1. Källan till minneskorruption och dess manifestation kan vara långt ifrån varandra, vilket gör det svårt att korrelera orsaken och effekten.
  2. Symtom visas under ovanliga förhållanden, vilket gör det svårt att konsekvent reproducera felet.

Fel i minneskorruption kan i stort sett klassificeras i fyra kategorier:

  1. Använda oinitialiserat minne : Innehållet i det uninitialiserade minnet behandlas som sopvärden. Att använda sådana värden kan leda till oförutsägbart programbeteende.
  2. Använda icke-ägt minne: Det är vanligt att använda pekare för att komma åt och ändra minne. Om en sådan pekare är en nollpekare, dinglande pekaren (pekar på minnet som redan har frigjorts) eller till en minnesplats utanför den aktuella stapeln eller höghöga gränser, hänvisar den till minnet som inte är besatt av programmet. Att använda sådana pekare är en allvarlig programmeringsfel. Åtkomst till sådant minne orsakar vanligtvis undantag från operativsystem, vilket oftast leder till en programkrasch (såvida inte lämplig minneskyddsprogramvara används).
  3. Använda minne utöver det tilldelade minnet ( buffertöverskridning ): Om en matris används i en slinga, med felaktigt avslutande tillstånd, kan minnet utanför matrisgränserna manipuleras av misstag. Buffertöverskridande är en av de vanligaste programmeringsfel som utnyttjas av datavirus, vilket orsakar allvarliga datorsäkerhetsproblem (t.ex. retur-till-libc-attack , stack-krossande skydd ) i allmänt använda program. I vissa fall kan program också felaktigt komma åt minnet innan en buffert startar.
  4. Felaktig hantering av heapminne: Minnesläckor och frigörande av icke-heap eller un-allokerat minne är de vanligaste felen orsakade av felaktig hantering av högminne.

Många minnesfelsökare som Purify , Valgrind , Insure ++ , Parasoft C / C ++ -test , AddressSanitizer är tillgängliga för att upptäcka fel i minneskorruption.

Se även

referenser

  1. ^ "Application Verifier" . MSDN-bibliotek . Microsoft. 19 april 2011 . Hämtad 4 maj 2011 .