safebuffers
Seção específica da Microsoft
Diz para o compilador não inserir verificações de segurança de excesso de buffer para uma função.
Sintaxe
__declspec( safebuffers )
Comentários
A opção do compilador /GS faz com que o compilador teste saturações de buffer inserindo verificações de segurança na pilha. Os tipos de estruturas de dados que são elegíveis para verificações de segurança estão descritos em /GS (verificação de segurança de buffer). Para obter mais informações sobre a detecção de saturação de buffer, consulte Recursos de segurança no MSVC.
Uma análise de código manual por especialista ou uma análise externa pode determinar que a função está protegida contra o excesso de buffer. Nesse caso, você pode suprimir verificações de segurança para uma função aplicando a palavra-chave __declspec(safebuffers)
à declaração da função.
Cuidado
As verificações de segurança do buffer fornecem a proteção de segurança importante e têm uma influência insignificante no desempenho. Portanto, recomendamos que você não suprime, exceto em casos raros em que o desempenho de uma função for um problema crítico e a função é comprovadamente segura.
Funções embutidas
Uma função primária pode usar uma palavra-chave de inlining para inserir uma cópia de uma função secundária. Se a palavra-chave __declspec(safebuffers)
for aplicada a uma função, a detecção de saturação de buffer será suprimida para essa função. No entanto, o inlining afeta a palavra-chave __declspec(safebuffers)
das seguintes maneiras.
Suponha que a opção /GS do compilador esteja especificada para ambas as funções, mas a função primária especifica a palavra-chave __declspec(safebuffers)
. As estruturas de dados na função secundária a tornam elegível para verificações de segurança, e a função não suprime essas verificações. Nesse caso:
Especifique a palavra-chave __forceinline na função secundária para forçar o compilador a embutir essa função independentemente das otimizações do compilador.
Como a função secundária é elegível para verificações de segurança, as verificações de segurança também são aplicadas à função primária mesmo que ela especifique a palavra-chave
__declspec(safebuffers)
.
Exemplo
O código a seguir mostra como usar a palavra-chave __declspec(safebuffers)
.
// 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;
}
Fim da seção específica da Microsoft
Confira também
__declspec
Palavras-chave
inline, __inline, __forceinline
strict_gs_check
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de