Sdílet prostřednictvím


strict_gs_check pragma

To pragma poskytuje rozšířenou kontrolu zabezpečení.

Syntaxe

#pragma strict_gs_check( [ push, ] { on | 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í /GS možnost kompilátoru nevkládává soubor cookie pro všechny funkce. Další informace najdete v tématu /GS (Kontrola zabezpečení vyrovnávací paměti).

Zkompilovat pomocí /GS povolení strict_gs_check.

Použijte ho pragma v modulech kódu, které jsou vystaveny potenciálně škodlivým datům. strict_gs_check je agresivní pragmaa používá se u funkcí, které nemusí tuto obranu potřebovat, ale je optimalizované tak, aby minimalizovala její účinek na výkon výsledné aplikace.

I když to pragmapoužijete, měli byste se snažit psát zabezpečený kód. To znamená, že kód nemá přetečení vyrovnávací paměti. strict_gs_check může chránit vaši aplikaci před přetečením vyrovnávací paměti, která zůstávají v kódu.

Příklad

V této ukázce dojde 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 bez /GSsouboru cookie se vloží do zásobníku, protože datový typ pole je ukazatel. Přidání vynutí strict_gs_checkpragma soubor cookie zásobníku do zásobníku funkcí.

// 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é

Direktivy Pragma a __pragma_Pragma klíčová slova
/GS (Kontrola zabezpečení vyrovnávací paměti)