다음을 통해 공유


strict_gs_check

이 pragma는 향상된 보안 검사를 제공합니다.

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

설명

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

/GS(버퍼 보안 검사)로 컴파일하여 strict-gs-check를 실행해야 합니다.

이 pragma를 사용 하 여 잠재적으로 유해한 데이터를 노출 하는 코드 모듈에서.이 pragma는 매우 공격적 이며이 방어를 해야 하지 않지만 결과 응용 프로그램의 성능에 미치는 영향을 최소화 하기 위해 최적화 된 함수에 적용 됩니다.

이 pragma를 사용해도 안전한 코드를 작성하도록 해야 합니다.즉, 코드에 버퍼 오버런이 없어야 합니다.strict_gs_check에서는 코드에 남아 있는 버퍼 오버런으로부터 응용 프로그램을 보호할 수 있습니다.

예제

배열을 로컬 배열에 복사할 때 다음 코드에서 버퍼 오버런이 발생합니다.이 코드를 /gs로 컴파일하는 경우 배열의 데이터 형식에 대 한 포인터 이므로 쿠키가 스택에 삽입 됩니다.strict_gs_check pragma를 추가하면 스택 쿠키가 함수 쿠키에 적용됩니다.

// 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 키워드

/GS(버퍼 보안 검사)