Ochranný bajt - Guard byte
![]() | tento článek ne uvést žádný Zdroje.Prosince 2009) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
A strážní bajt[Citace je zapotřebí ] je součástí a počítačový program je Paměť který pomáhá vývojářům softwaru najít přetečení vyrovnávací paměti při vývoji programu.
Zásada
Když program je sestaven pro ladění, Všechno Paměť alokace jsou prefixovány a postfixovány strážními bajty. Speciální alokace paměti rutiny může poté provádět další úkoly k určení nežádoucích pokusů o čtení a zápis mimo přidělenou paměť. Tyto další bajty pomáhají zjistit, že program zapisuje do (nebo dokonce čte z) nevhodných oblastí paměti, což může způsobit přetečení vyrovnávací paměti. V případě přístupu k těmto bajtům pomocí algoritmu programu je programátor varován informacemi, které mu pomáhají najít problém.
Kontrolu nevhodného přístupu k strážním bajtům lze provést dvěma způsoby:
- nastavením a Paměť bod zlomu - podmínkou zápisu a / nebo čtení na tyto bajty, nebo
- předběžnou inicializací ochranných bajtů konkrétními hodnotami a kontrolou hodnot při uvolnění.
První způsob je možný pouze s a debugger který zpracovává takovéto zarážky, ale výrazně zvyšuje šanci na lokalizaci problému. Druhý způsob nevyžaduje žádné debuggery ani speciální prostředí a lze to provést i na jiných počítačích, ale programátor je na přetečení upozorněn až při deallokaci, což je někdy docela pozdě.
Protože strážní bajty vyžadují provedení dalšího kódu a přidělení další paměti, používají se pouze při kompilaci programu pro ladění. Při kompilaci jako uvolnění, ochranné bajty se nepoužívají vůbec, ani rutiny, které s nimi pracují.
Příklad
Programátor chce přidělit a nárazník 100 bajtů paměti při ladění. Přidělení systémové paměti rutina místo toho přidělí 108 bajtů a přidá 4 vedoucí a 4 koncové ochranné bajty a vrátit se A ukazatel posunutý o 4 přední strážní bajty doprava, úkryt je od programátora. Programátor by pak měl pracovat s přijatým ukazatelem bez znalosti přítomnosti strážních bytů.
Pokud programátorův algoritmus píše přímo mimo přidělený prostor, přepíše ochranné bajty. Později, po uvolnění, rutina přidělení zkontroluje, zda jsou upraveny ochranné bajty, a případně nahlásí chybu.
Problémy
Rutiny přidělení paměti vyplňují ochranné bajty hodnotami, které by neměly být používány programátorskými algoritmy. To však nelze předvídat. Když algoritmus použije tyto hodnoty a přepíše nimi ochranné bajty (relevantní je pouze poslední zápis před uvolněním), nelze detekovat přetečení, protože bajty se ve skutečnosti nezměnily. Místo toho lze použít možnost zarážky paměti nastavenou na podmínku přístupu k těmto bajtům v debuggeru.