Condividi tramite


strict_gs_check pragma

In questo modo pragma viene fornito un controllo di sicurezza avanzato.

Sintassi

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

Osservazioni:

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 /GS compilatore non inserisce un cookie per tutte le funzioni. Per altre informazioni, vedere /GS (Controllo della sicurezza del buffer).

Compilare usando /GS per abilitare strict_gs_check.

Usarlo pragma nei moduli di codice esposti a dati potenzialmente dannosi. strict_gs_check è un oggetto aggressivo pragmae viene applicato alle funzioni che potrebbero non necessitare di questa difesa, ma è ottimizzato per ridurre al minimo l'effetto sulle prestazioni dell'applicazione risultante.

Anche se si usa questo pragma, è consigliabile cercare di scrivere codice sicuro. Ovvero, assicurarsi che il codice non abbia sovraccarichi del buffer. strict_gs_check potrebbe proteggere l'applicazione da sovraccarichi del buffer che rimangono nel codice.

Esempio

In questo esempio si verifica un sovraccarico del buffer quando si copia una matrice in una matrice locale. Quando si compila questo codice con /GS, non viene inserito alcun cookie nello stack, perché il tipo di dati della matrice è un puntatore. L'aggiunta di strict_gs_checkpragma forza il cookie dello stack nello stack di funzioni.

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

Vedi anche

Pragmadirettive e parole __pragma chiave e _Pragma
/GS (Controllo di sicurezza del buffer)