strict_gs_check
Este pragma fornece verificação de segurança avançada.
#pragma strict_gs_check([push,] on )
#pragma strict_gs_check([push,] off )
#pragma strict_gs_check(pop)
Comentários
Instrui o compilador para inserir um cookie aleatório na pilha de função para ajudar a detectar algumas categorias estouro de pilha baseado em buffer.Por padrão, a opção de compilador /GS (verificação de segurança do buffer) não insere um cookie para todas as funções.Para obter mais informações, consulte /GS (verificação de segurança de buffer).
Você deve compilar com /GS (verificação de segurança do buffer) para ativar o strict_gs_check.
Use este pragma em módulos de código que são expostos a dados potencialmente prejudiciais.Este pragma é muito agressivo, e é aplicada às funções que não podem precisar essa proteção, mas otimizado para minimizar o efeito no desempenho do aplicativo resultante.
Mesmo se você usar esse pragma, você deve esforçar-se para escrever código seguro.Isto é, certifique-se de que seu código não tem nenhuma estouro de buffer.o strict_gs_check pode proteger seu aplicativo de estouros de buffer que permanecem em seu código.
Exemplo
No código a seguir um estouro de buffer ocorre quando nós copiamos uma matriz para uma matriz local.Quando você compilar este código com /GS, nenhum cookie é inserido na pilha, como o tipo de dados de matriz é um ponteiro.Adicionando o pragma de strict_gs_check força o cookie de pilha na pilha de função.
// 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;
}