safebuffers
Específicos do Microsoft
Informa o compilador não inserir as verificações de segurança de saturação de buffer para uma função.
__declspec( safebuffers )
Comentários
O /GS opção de compilador faz o compilador testar a saturações de buffer, inserindo as verificações de segurança na pilha.Os tipos de estruturas de dados que estão qualificados para verificações de segurança descritos na /GS (verificação de segurança de buffer).Para obter mais informações sobre a detecção de saturação de buffer, consulte Compilador verifica na profundidade de segurança no site do MSDN.
Uma revisão manual de código especializados ou análise externa pode determinar que uma função está protegida contra uma saturação de buffer.Nesse caso, você pode suprimir as verificações de segurança para uma função, aplicando a _ _declspec(safebuffers) palavra-chave para a declaração da função.
Cuidado |
---|
Buffer verificações de segurança fornecem proteção de segurança importantes e têm um efeito insignificante no desempenho.Portanto, recomendamos que você não suprimi-las, exceto no caso raro em que o desempenho de uma função é uma preocupação fundamental e a função é conhecida por ser seguro. |
Funções embutidas
A principal função pode usar um inlining palavra-chave para inserir uma cópia de um função secundária.Se o _ _declspec(safebuffers) palavra-chave é aplicada a uma função, detecção de saturação de buffer é suprimida para essa função.No entanto, inlining afeta o _ _declspec(safebuffers) palavra-chave das seguintes maneiras.
Suponha que o /GS opção de compilador é especificada para as duas funções, mas a principal função especifica a _ _declspec(safebuffers) palavra-chave.As estruturas de dados na função secundária torná-la elegível para verificações de segurança e a função não suprime as verificações.Nesse caso:
Especificar o __forceinline palavra-chave sobre a função secundária para forçar o compilador para inline que funcionam independentemente das otimizações do compilador.
Porque a função secundária está qualificada para verificações de segurança, verificações de segurança também são aplicadas para a função principal, mesmo que ele especifica o _ _declspec(safebuffers) palavra-chave.
Exemplo
O código a seguir mostra como usar o _ _declspec(safebuffers) palavra-chave.
// compile with: /c /GS
typedef struct {
int x[20];
} BUFFER;
static int checkBuffers() {
BUFFER cb;
// Use the buffer...
return 0;
};
static __declspec(safebuffers)
int noCheckBuffers() {
BUFFER ncb;
// Use the buffer...
return 0;
}
int wmain() {
checkBuffers();
noCheckBuffers();
return 0;
}
Específicos do Microsoft final