Udostępnij za pośrednictwem


safebuffers

Specyficzne dla firmy Microsoft

Informuje kompilator, aby nie wstawiać sprawdzeń zabezpieczeń przepełnienia buforu dla funkcji.

__declspec( safebuffers )

Uwagi

Opcja kompilatora /GS powoduje, że kompilator testuje przepełnienia buforu, wstawiając sprawdzenia zabezpieczeń na stosie.Rodzaje struktur danych, które są uprawnione do sprawdzania zabezpieczeń są opisane w /GS (Sprawdzanie zabezpieczeń bufora).Aby uzyskać więcej informacji dotyczących wykrywania przepełnienia buforu, zobacz Testy bezpieczeństwa kompilatora w głąb w witrynie MSDN w sieci Web.

Przegląd kodu lub zewnętrzna analiza eksperta może pomóc w ustaleniu, że funkcja jest bezpieczna od przepełnienia buforu.W takim przypadku można pominąć sprawdzanie zabezpieczeń dla funkcji, stosując słowo kluczowe __declspec(safebuffers) przy deklaracji funkcji.

Informacje dotyczące przestrogiPrzestroga

Sprawdzenia zabezpieczeń buforu zapewniają istotną ochronę dla bezpieczeństwa i mają niewielki wpływ na wydajność.Dlatego zaleca się, aby nie pomijać ich, za wyjątkiem rzadkich przypadków, w których wydajność funkcji odgrywa krytyczną rolę i wiadomo, że funkcja jest bezpieczna.

Funkcje wbudowane

Funkcja podstawowa może używać słowa kluczowego inlining do wstawienia kopii funkcji pomocniczej.Jeśli słowo kluczowe __declspec(safebuffers) jest zastosowane do funkcji, detekcja przepełnienia buforu jest pomijana dla tej funkcji.Jednakże wbudowywanie wpływa na słowo kluczowe __declspec(safebuffers) w następujące sposoby.

Załóżmy, że opcja kompilatora /GS jest określona dla obu funkcji, ale podstawowa funkcja określa słowo kluczowe __declspec(safebuffers) .Struktury danych w funkcji pomocniczej uprawniają ją do sprawdzania zabezpieczeń i funkcja nie pomija tych sprawdzeń.W tym przypadku:

  • Określ słowo kluczowe __forceinline dla funkcji pomocniczej w celu wymuszenia, aby kompilator wbudował tą funkcję niezależnie od optymalizacji kompilatora.

  • Ponieważ funkcja pomocnicza jest uprawniona do sprawdzenia zabezpieczeń, sprawdzanie zabezpieczeń jest także stosowane do funkcji podstawowej, nawet pomimo tego, że określa ona słowo kluczowe __declspec(safebuffers) .

Przykład

W poniższym kodzie pokazano sposób użycia słowa kluczowego __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;
}

KONIEC informacji specyficznych dla firmy Microsoft

Zobacz też

Informacje

__declspec

Słowa kluczowe języka C++

inline, __inline, __forceinline

strict_gs_check