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:
derleyiciyi , derleyici iyileştirmelerinden bağımsız olarak bu işlevi satır içi olarak yapmaya zorlamak için ikincil işlevde __forceinline anahtar sözcüğünü belirtin.
İkincil işlev güvenlik denetimleri için uygun olduğundan, anahtar sözcüğünü belirtse
__declspec(safebuffers)
bile birincil işleve güvenlik denetimleri de uygulanır.
Ö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
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin