Poškození paměti - Memory corruption
![]() | Tento článek má několik problémů. Prosím pomozte vylepši to nebo diskutovat o těchto problémech na internetu diskusní stránka. (Zjistěte, jak a kdy tyto zprávy ze šablony odebrat) (Zjistěte, jak a kdy odstranit tuto zprávu šablony)
|
Provádění programu |
---|
Obecné pojmy |
Druhy kódu |
Strategie kompilace |
Pozoruhodné doby běhu |
Pozoruhodné překladače a řetězce nástrojů |
Poškození paměti se vyskytuje v a počítačový program když obsah a umístění paměti jsou upraveny kvůli programatickému chování, které překračuje záměr původního programátora nebo konstruktů programu / jazyka; toto se nazývá porušující bezpečnost paměti. Nejpravděpodobnější příčinou poškození paměti je chyba programování. Pokud je obsah poškozené paměti použit později v tomto programu, vede to buď ke zhroucení programu, nebo k podivnému a bizarnímu chování programu. Téměř 10% selhání aplikací v systémech Windows je způsobeno halda korupce.[1]
Moderní programovací jazyky jako C a C ++ mají výkonné funkce explicitní správy paměti a aritmetika ukazatele. Tyto funkce jsou navrženy pro vývoj efektivních aplikací a systémového softwaru. Nesprávné použití těchto funkcí však může vést k chybám poškození paměti.
Poškození paměti je jednou z nejodolnějších tříd programovacích chyb, a to ze dvou důvodů:
- Zdroj poškození paměti a jeho projevy mohou být daleko od sebe, takže je těžké korelovat příčinu a účinek.
- Příznaky se objevují za neobvyklých podmínek, takže je obtížné důsledně reprodukovat chybu.
Chyby poškození paměti lze obecně rozdělit do čtyř kategorií:
- Použitím neinicializovaná paměť: S obsahem neinicializované paměti se zachází jako s hodnotami smetí. Použití těchto hodnot může vést k nepředvídatelnému chování programu.
- Používání nevlastněné paměti: K přístupu a úpravám paměti je běžné používat ukazatele. Pokud je takový ukazatel nulovým ukazatelem, visící ukazatel (ukazuje na paměť, která již byla uvolněna), nebo na místo v paměti mimo aktuální zásobník nebo halda hranice, jedná se o paměť, kterou program poté nevlastní. Používání těchto ukazatelů je vážnou programovací chybou. Přístup k takové paměti obvykle způsobí výjimky operačního systému, které nejčastěji vedou ke zhroucení programu (pokud se nepoužívá vhodný software na ochranu paměti).
- Použití paměti nad rámec paměti, která byla přidělena (přetečení zásobníku ): Pokud je ve smyčce použito pole s nesprávným ukončovacím stavem, může dojít k náhodnému narušení paměti za hranicemi pole. Přetečení vyrovnávací paměti je jednou z nejčastějších programovacích vad využívaných počítačovými viry, což způsobuje vážné problémy zabezpečení počítače problémy (např. útok zpět na libc, ochrana před rozbitím zásobníku ) v široce používaných programech. V některých případech mohou programy také nesprávně přistupovat k paměti před spuštěním vyrovnávací paměti.
- Chybná správa paměti haldy: Úniky paměti a uvolnění ne haldy nebo nepřidělené paměti jsou nejčastější chyby způsobené chybnou správou haldy paměti.
Mnoho debuggery paměti jako Očistit, Valgrind, Pojistit ++, Test Parasoft C / C ++, AddressSanitizer jsou k dispozici pro detekci chyb poškození paměti.
Viz také
Reference
- ^ „Ověřovač aplikace“. Knihovna MSDN. Microsoft. 19. dubna 2011. Citováno 4. května 2011.
externí odkazy
- Výukový program pro poškození paměti Úvod do technik vykořisťování a ochranných mechanismů