Partager via


strict_gs_check

Ce pragma fournit une vérification de la sécurité renforcée.

#pragma strict_gs_check([push,] on ) 
#pragma strict_gs_check([push,] 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 compilateur /GS (vérification de sécurité de la mémoire tampon) n'insère pas un cookie pour toutes les fonctions. Pour plus d'informations, consultez /GS (Vérification de la sécurité de la mémoire tampon).

Vous devez compiler avec /GS (vérification de sécurité de la mémoire tampon) pour activer strict_gs_check.

Utilisez ce pragma dans les modules de code qui sont exposés à des données potentiellement nuisibles. Ce pragma est très agressif. Il est appliqué à des fonctions qui peuvent ne pas avoir besoin de cette défense, mais il est optimisé pour minimiser son effet sur les performances de l'application résultante.

Même si vous utilisez ce pragma, vous devez vous efforcer d'écrire du code sécurisé. Autrement dit, assurez-vous que votre code n'a aucun 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 le code suivant, un dépassement de mémoire tampon se produit lorsque nous copions 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 tableau est un pointeur. L'ajout du pragma strict_gs_check force l'insertion du cookie de pile dans la pile de fonction.

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

Référence

Directives pragma et mot clé _Pragma

/GS (Vérification de la sécurité de la mémoire tampon)