strict_gs_check
Tato direktiva pragma poskytuje rozšířenou kontrolu zabezpečení.
#pragma strict_gs_check([push,] on )
#pragma strict_gs_check([push,] off )
#pragma strict_gs_check(pop)
Poznámky
Dává pokyn kompilátoru k vložení náhodných souborů cookie do zásobníku funkce pro zjištění některých kategorií přetečení vyrovnávací paměti založené na zásobníku.Ve výchozím nastavení nevkládá možnost kompilátoru /GS (kontrola zabezpečení vyrovnávací paměti) soubor cookie pro všechny funkce.Další informace naleznete v tématu /GS (kontrola zabezpečení vyrovnávací paměti).
Pro povolení strict_gs_check je nutné kompilovat s /GS (kontrola zabezpečení vyrovnávací paměti).
U modulů kódu, které jsou vystaveny potenciálně škodlivým datům je tuto direktivu pragma třeba použít.Direktiva pragma je velmi agresivní a je použita na funkce, které tuto obranu pravděpodobně potřebovat nebudou, ale je optimalizována pro minimalizaci vlivu na výkon výsledné aplikace.
I když bude tato direktiva pragma použita, je třeba snažit se psát bezpečný kód.To znamená zajistit, aby u kódu nedošlo k přetečení zásobníku. strict_gs_check může zabránit přetečením zásobníku, který zůstává v kódu aplikace.
Příklad
V následujícím kódu dochází k přetečení vyrovnávací paměti při kopírování pole do místního pole.Při kompilaci tohoto kódu s /GS nebude do zásobníku vložen žádný soubor cookie, protože datový typ pole je ukazatel.Přidání direktivy pragma strict_gs_check vynutí soubor cookie zásobníku do zásobníku funkce.
// pragma_strict_gs_check.cpp
// compile with: /c
#pragma strict_gs_check(on)
void ** ReverseArray(void **pData,
size_t cData)
{
// *** This buffer is subject to being overrun!! ***
void *pReversed[20];
// Reverse the array into a temporary buffer
for (size_t j = 0, i = cData; i ; --i, ++j)
// *** Possible buffer overrun!! ***
pReversed[j] = pData[i];
// Copy temporary buffer back into input/output buffer
for (size_t i = 0; i < cData ; ++i)
pData[i] = pReversed[i];
return pData;
}