safebuffers

Specyficzne dla firmy Microsoft

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

Składnia

__declspec( safebuffers )

Uwagi

Opcja /GS kompilatora powoduje, że kompilator testuje przepełnienie buforu przez wstawienie kontroli zabezpieczeń na stosie. Typy struktur danych, które kwalifikują się do kontroli zabezpieczeń, są opisane w / GS (Sprawdzanie zabezpieczeń buforu). Aby uzyskać więcej informacji na temat wykrywania przekroczenia buforu, zobacz Funkcje zabezpieczeń w programie MSVC.

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

Uwaga

Sprawdzenia zabezpieczeń buforu zapewniają istotną ochronę i mają niewielki wpływ na wydajność. Dlatego zaleca się, aby nie pomijać ich poza rzadkimi przypadkami, gdy wydajność funkcji odgrywa krytyczną rolę i wiadomo, że funkcja jest bezpieczna.

Funkcje śródwierszowe

Funkcja podstawowa może użyć słowa kluczowego inlining, aby wstawić kopię funkcji pomocniczej. __declspec(safebuffers) Jeśli słowo kluczowe jest stosowane do funkcji, wykrywanie przepełnienia buforu jest pomijane dla tej funkcji. Jednak podkreślenie wpływa na __declspec(safebuffers) słowo kluczowe w następujący sposób.

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

  • Określ słowo kluczowe __forceinline w funkcji pomocniczej, aby wymusić wbudowane działanie kompilatora niezależnie od optymalizacji kompilatora.

  • Ponieważ funkcja pomocnicza kwalifikuje się do kontroli zabezpieczeń, kontrole zabezpieczeń są również stosowane do funkcji podstawowej, mimo że określa słowo __declspec(safebuffers) kluczowe.

Przykład

Poniższy kod pokazuje, jak używać 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;
}

END Microsoft Specific

Zobacz też

__declspec
Słowa kluczowe
inline, __inline, __forceinline
strict_gs_check