Sdílet prostřednictvím


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;
}

Viz také

Referenční dokumentace

Direktivy Pragma a klíčové slovo __Pragma

/GS (kontrola zabezpečení vyrovnávací paměti)