Share via


strict_gs_check

Esta directiva pragma proporciona una comprobación de seguridad mejorada.

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

Comentarios

Indica al compilador que inserte una cookie aleatoria en la pila de la función para ayudar a detectar algunas categorías de saturación del búfer basada en la pila. De forma predeterminada, la opción de compilador /GS (comprobación de seguridad del búfer) no inserta una cookie para todas las funciones. Para obtener más información, vea /GS (Comprobación de seguridad del búfer).

Debe compilar con /GS (comprobación de seguridad del búfer) para habilitar strict_gs_check.

Utilice esta directiva pragma en módulos que estén expuestos a datos potencialmente dañinos. Esta directiva pragma es muy agresiva y se aplica a funciones que quizá no necesiten esta defensa, pero está optimizada para minimizar su efecto sobre el rendimiento de la aplicación resultante.

Incluso si usa esta directiva pragma, debe procurar escribir código seguro. Es decir, asegúrese de que el código no tenga saturaciones del búfer. strict_gs_check puede proteger la aplicación de las saturaciones del búfer que permanezcan en el código.

Ejemplo

En el código siguiente, se produce una saturación del búfer cuando copiamos una matriz en una matriz local. Cuando se compila este código con /GS, no se inserta ninguna cookie de la pila, porque el tipo de datos de la matriz es un puntero. Al agregar la directiva pragma strict_gs_check se fuerza la cookie de la pila en la pila de funciones.

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

Vea también

Referencia

Directives pragma y la palabra clave __pragma

/GS (Comprobación de seguridad del búfer)