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_check
pragma 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
Pragmadirectivas y las __pragma
palabras clave y _Pragma
/GS
(Comprobación de seguridad de búfer)