Condividi tramite


strict_gs_check

Questo pragma fornisce controllo di sicurezza avanzato.

#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 casuale nello stack di funzione per il rilevamento di alcune categorie di sovraccarico del buffer basato su stack. Per impostazione predefinita, l'opzione del compilatore /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 a dati potenzialmente dannosi. Questo pragma è particolarmente aggressivo e si applica alle funzioni che potrebbero non necessitare di questa difesa, ma è ottimizzato per ridurre l'effetto sulle prestazioni dell'applicazione risultante.

Anche se si utilizza questo pragma, si deve cercare di scrivere un codice sicuro. Ovvero assicurarsi che il codice non abbia sovraccarichi del buffer. Lo strict_gs_check potrebbe 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 questo codice con /GS, non viene inserito nessun cookie nello stack, poiché il tipo di dati di una matrice è un puntatore. L'aggiunta del pragma 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 parola chiave __Pragma

/GS (Controllo sicurezza buffer)