Поделиться через


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_checkpragma Добавление файла 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 директивы и ключевые __pragma _Pragma слова
/GS (Проверка безопасности буфера)