strict_gs_check

此杂注提供增强的安全检查。

#pragma strict_gs_check([push,] on ) 
#pragma strict_gs_check([push,] off ) 
#pragma strict_gs_check(pop)

备注

指示在函数堆栈中编译器插入随机 cookie 以帮助检测基于堆栈的缓冲区溢出的某些类别。 默认情况下,/GS(缓冲区安全检查)编译器选项不插入 Cookie 到任何函数。 有关更多信息,请参见/GS(缓冲区安全检查)

启用 strict_gs_check,必须用 /GS (Buffer Security Check) 编译。

使用此说明在显示潜在有害的数据的代码模块。 此杂注非常积极的和适用于可能不需要此方法的功能,但是,优化使其对结果的应用程序的性能的影响。

即使您使用此杂注,应尽可能地写入安全代码。 即,确保您的编码没有缓冲区溢出。 strict_gs_check 可能防止在代码中一定存在的应用程序缓冲区溢出。

示例

在下面的编码中,将数组复制到局部数组中时,就会发生缓冲区溢出。 在使用编译 /GS 时的此代码,cookie 在堆栈未插入,因为数组数据类型是指针。 添加 strict_gs_check 杂注强制堆栈 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;
}

请参见

参考

杂注指令和__Pragma关键字

/GS(缓冲区安全检查)