Condividi tramite


strict_gs_check

Questo pragma consente di controllare avanzato di sicurezza.

#pragma strict_gs_check([push,] on ) 
#pragma strict_gs_check([push,] off ) 
#pragma strict_gs_check(pop)

Note

Indica al compilatore di inserire un cookie casuali nello stack di funzione per il rilevamento alcune categorie di sovraccarico del buffer basato su stack.Per impostazione predefinita, l'opzione del compilatore di /GS (controllo di sicurezza buffer) non inserisce un cookie per tutte le funzioni.Per ulteriori informazioni, vedere /GS (Controllo sicurezza buffer).

È necessario compilare con /GS (controllo di sicurezza buffer) per abilitare lo strict_gs_check.

Utilizzare questo pragma in moduli di codice esposti ai dati potenzialmente dannosi.Questo pragma è particolarmente aggressiva e si applica alle funzioni che potrebbero non essere necessario questo difesa, ma è ottimizzato per ridurre l'effetto sulle prestazioni dell'applicazione risultante.

Anche se si utilizza questo pragma, è necessario cercare di scrivere codice protetto.Ovvero assicurarsi che il codice non abbia sovraccarichi del buffer.lo strict_gs_check può proteggere l'applicazione dai sovraccarichi del buffer che rimangono nel codice.

Esempio

Nel codice seguente si verifica un sovraccarico del buffer quando copiamo una matrice in una matrice locale.Quando si compila il codice con /GS, senza cookie viene inserita nello stack, poiché il tipo di dati matrice è un puntatore.Aggiungendo il pragma di strict_gs_check impone un cookie dello stack nello stack di funzione.

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

Vedere anche

Riferimenti

Direttive pragma e la parola chiave di __Pragma

/GS (Controllo sicurezza buffer)