Share via


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