strict_gs_check pragma

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

Sintaxis

#pragma strict_gs_check( [ push, ] { on | 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 /GS del compilador no inserta una cookie para todas las funciones. Para más información, consulte /GS (Comprobación de seguridad del búfer).

Compile mediante /GS para habilitar strict_gs_check.

Utilice esta directiva pragma en módulos que estén expuestos a datos potencialmente dañinos. strict_gs_check es una directiva pragma 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 tiene desbordamientos del búfer. strict_gs_check podría proteger la aplicación frente a desbordamientos del búfer que permanecen en el código.

Ejemplo

En este ejemplo, se produce un desbordamiento del búfer cuando se copia 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 strict_gs_checkpragma 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;
}

Consulte también

Directivas pragma y las palabras clave __pragma y _Pragma
/GS (Comprobación de seguridad de búfer)