safebuffers
Microsoft 專有的
指示編譯器不要插入函式的緩衝區滿溢的安全性檢查。
__declspec( safebuffers )
備註
/GS編譯器選項會使編譯器測試插入到堆疊上的安全性檢查的緩衝區滿溢。進行安全性檢查的資料結構的型別所述/GS (緩衝區安全性檢查)。如需有關緩衝區滿溢偵測的詳細資訊,請參閱編譯器安全性檢查深入探索 MSDN 網站上。
專家的人工程式碼檢閱 」 或 「 外部的分析,可能會決定函式可避開緩衝區滿溢的情況。在此情況下,您可以隱藏函式的安全性檢查,藉由套用 __declspec(safebuffers)函式宣告的關鍵字。
警告 |
---|
緩衝區安全性檢查重要的安全性防護措施,並對效能有不明顯的影響。因此,我們建議您不要不隱藏,除了在極少數的情況下,其中函式的效能是重要的考量,而該函式已知為安全。 |
內嵌函式
A 主要功能 可以使用 內嵌 關鍵字] 以插入一份 第二個函式。如果 __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;
}
結束 Microsoft 特定