strict_gs_check
pragma
這 pragma 可提供增強的安全性檢查。
語法
#pragma strict_gs_check(
[push,
] {on
|off
})
#pragma strict_gs_check( pop )
備註
指示編譯器在函式堆疊中隨機插入 Cookie,協助偵測部分堆疊型緩衝區滿溢分類。 根據預設,編譯 /GS
程式選項不會為所有函式插入 Cookie。 如需詳細資訊,請參閱 /GS
(緩衝區安全性檢查)。
使用 /GS
編譯 以啟用 strict_gs_check
。
在公開給潛在有害資料的程式碼模組中使用此選項 pragma 。 strict_gs_check
是積極的 pragma ,而且會套用至可能不需要此防禦的函式,但已優化以將其對所產生應用程式效能的影響降到最低。
即使您使用此 pragma ,您也應該努力撰寫安全的程式碼。 也就是說,請確定您的程式碼沒有緩衝區滿溢。 strict_gs_check
可能會保護您的應用程式免于在程式碼中保留的緩衝區滿溢。
範例
在此範例中,當我們將陣列複製到本機陣列時,就會發生緩衝區滿溢。 當您使用 /GS
編譯此程式碼時,不會在堆疊中插入任何 Cookie,因為陣列資料類型是指標。 strict_gs_check
pragma 將 強制堆疊 Cookie 新增至函式堆疊。
// pragma_strict_gs_check.cpp
// compile with: /c
#pragma strict_gs_check(on)
void ** ReverseArray(void **pData,
size_t cData)
{
// *** This buffer is subject to being overrun!! ***
void *pReversed[20];
// Reverse the array into a temporary buffer
for (size_t j = 0, i = cData; i ; --i, ++j)
// *** Possible buffer overrun!! ***
pReversed[j] = pData[i];
// Copy temporary buffer back into input/output buffer
for (size_t i = 0; i < cData ; ++i)
pData[i] = pReversed[i];
return pData;
}
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應