Aracılığıyla paylaş


safebuffers

Microsoft'a Özgü

Derleyiciye bir işlev için arabellek taşması güvenlik denetimlerini eklememesini bildirir.

Sözdizimi

__declspec( safebuffers )

Açıklamalar

/GS derleyici seçeneği, yığına güvenlik denetimleri ekleyerek derleyicinin arabellek taşmalarını test etmesine neden olur. Güvenlik denetimleri için uygun veri yapılarının türleri /GS (Arabellek Güvenlik Denetimi) bölümünde açıklanmıştır. Arabellek taşması algılama hakkında daha fazla bilgi için bkz . MSVC'de Güvenlik Özellikleri.

Uzman düzeyde el ile kod incelemesi veya harici analiz, işlevde arabellek taşması görülmediğini belirleyebilir. Bu durumda, işlev bildirimine anahtar sözcüğünü uygulayarak __declspec(safebuffers) bir işlev için güvenlik denetimlerini gizleyebilirsiniz.

Dikkat

Arabellek güvenlik denetimleri, önemli bir güvenlik koruması sağlar ve performans üzerinde göz ardı edilebilir bir etki oluşturur. Bu nedenle, işlev performansının kritik bir önem arz ettiği ve işlevin güvenli olduğunun bilindiği nadir durumlar haricinde bunları engellememenizi öneririz.

Satır İçi İşlevler

Birincil işlev, ikincil bir işlevin kopyasını eklemek için bir satır içi anahtar sözcüğü kullanabilir. __declspec(safebuffers) Anahtar sözcük bir işleve uygulanırsa, bu işlev için arabellek taşması algılaması gizlenebilir. Ancak, inlining anahtar sözcüğünü __declspec(safebuffers) aşağıdaki şekillerde etkiler.

Her iki işlev için /GS derleyici seçeneğinin belirtildiğini, ancak birincil işlevin anahtar sözcüğünü belirttiğini __declspec(safebuffers) varsayalım. İkincil işlevdeki veri yapıları, bunu güvenlik denetimleri için uygun hale getirir ve işlev bu denetimleri engellemez. Bu durumda:

Örnek

Aşağıdaki kodda anahtar sözcüğün nasıl kullanılacağı gösterilmektedir __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'a Özgü

Ayrıca bkz.

__declspec
Anahtar Sözcükler
satır içi, __inline, __forceinline
strict_gs_check