Partager via


strict_gs_check pragma

Cela pragma fournit une vérification améliorée de la sécurité.

Syntaxe

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

Notes

Indique au compilateur qu'il faut insérer un cookie aléatoire dans la pile de fonction pour faciliter la détection de certaines catégories de dépassement de mémoire tampon basé sur la pile. Par défaut, l’option du /GS compilateur n’insère pas de cookie pour toutes les fonctions. Pour plus d’informations, consultez /GS (Vérification de sécurité de la mémoire tampon).

Compiler à l’aide de l’activation /GS strict_gs_check.

Utilisez-le pragma dans les modules de code exposés à des données potentiellement dangereuses. strict_gs_check est agressif pragmaet est appliqué aux fonctions qui n’ont peut-être pas besoin de cette défense, mais est optimisée pour réduire son effet sur les performances de l’application résultante.

Même si vous utilisez ce code pragma, vous devez vous efforcer d’écrire du code sécurisé. Autrement dit, assurez-vous que votre code n’a pas de dépassement de mémoire tampon. strict_gs_check peut protéger votre application contre les dépassements de mémoire tampon qui restent dans votre code.

Exemple

Dans cet exemple, un dépassement de mémoire tampon se produit lorsque nous copiez un tableau dans un tableau local. Lorsque vous compilez ce code avec /GS, aucun cookie n’est inséré dans la pile, car le type de données de tableau est un pointeur. Ajout des forces du strict_gs_checkpragma cookie de pile dans la pile de fonctions.

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

Voir aussi

Pragma directives et mots __pragma _Pragma clés
/GS (Contrôle de sécurité de la mémoire tampon)