safebuffers
Microsoft 特定的
告知編譯器不要插入函式的緩衝區滿溢安全性檢查。
語法
__declspec( safebuffers )
備註
/GS 編譯器選項會藉由在堆疊上插入安全性檢查,讓編譯器測試緩衝區滿溢。 符合安全性檢查資格的資料結構類型會在 /GS(緩衝區安全性檢查) 中 說明。 如需緩衝區滿溢偵測的詳細資訊,請參閱 MSVC 中的安全性功能。
某位專業人員手動檢閱程式碼或進行外部分析後,可能會判斷函式不會發生緩衝區滿溢。 在此情況下,您可以將 關鍵字套用 __declspec(safebuffers)
至函式宣告,以隱藏函式的安全性檢查。
警告
緩衝區安全性檢查提供了重要的安全性保護,且幾乎不會對效能造成影響。 因此,除了在少數函式的效能為重要考量,以及函式已知為安全的情況以外,建議您不要抑制這些檢查。
內嵌函式
主要函 式可以使用 內嵌 關鍵字來插入次要函 式的 複本。 __declspec(safebuffers)
如果關鍵字套用至函式,則會隱藏該函式的緩衝區滿溢偵測。 不過,內嵌會以下列方式影響 __declspec(safebuffers)
關鍵字。
假設兩個函式都指定了 /GS 編譯器選項,但主要函式會 __declspec(safebuffers)
指定 關鍵字。 第二個函式中的資料結構會使其進行安全性檢查,因此函式不會抑制這些檢查。 在此案例中:
指定 次要函式上的 __forceinline 關鍵字,以強制編譯器內嵌該函式,而不論編譯器優化為何。
因為次要函式符合安全性檢查資格,所以即使它指定
__declspec(safebuffers)
關鍵字,安全性檢查也會套用至主要函式。
範例
下列程式碼示範如何使用 __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 特定的
另請參閱
__declspec
關鍵字
inline、__inline、__forceinline
strict_gs_check
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應