다음을 통해 공유


strict_gs_check pragma

이렇게 하면 pragma 향상된 보안 검사가 제공됩니다.

구문

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

설명

스택 기반 버퍼 오버런의 일부 범주를 감지하는 데 도움이 되는 임의의 쿠키를 함수 스택에 삽입하도록 컴파일러에 지시합니다. 기본적으로 /GS 컴파일러 옵션은 모든 함수에 대한 쿠키를 삽입하지 않습니다. 자세한 내용은 (버퍼 보안 검사)를 참조 /GS 하세요.

를 사용하도록 /GS 설정 strict_gs_check하여 컴파일합니다.

잠재적으로 유해한 데이터에 노출되는 코드 모듈에서 사용합니다 pragma . strict_gs_check 는 공격적이며 pragma이 방어가 필요하지 않을 수도 있지만 결과 애플리케이션의 성능에 미치는 영향을 최소화하도록 최적화된 함수에 적용됩니다.

이 pragma코드를 사용하더라도 보안 코드를 작성하려고 노력해야 합니다. 즉, 코드에 버퍼 오버런이 없는지 확인합니다. strict_gs_check 는 코드에 남아 있는 버퍼 오버런으로부터 애플리케이션을 보호할 수 있습니다.

예시

이 샘플에서는 배열을 로컬 배열에 복사할 때 버퍼 오버런이 발생합니다. 이 코드를 /GS컴파일할 때 배열 데이터 형식이 포인터이므로 스택에 쿠키가 삽입되지 않습니다. 스택 쿠키를 strict_gs_checkpragma 함수 스택에 강제로 추가합니다.

// 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 (버퍼 보안 검사)