safebuffer
Microsoft 전용
함수에 대한 버퍼 오버런 보안 검사를 삽입하지 않도록 컴파일러에 지시합니다.
구문
__declspec( safebuffers )
설명
/GS 컴파일러 옵션을 사용하면 컴파일러가 스택에 보안 검사를 삽입하여 버퍼 오버런을 테스트합니다. 보안 검사에 적합한 데이터 구조 형식은 /GS(버퍼 보안 검사)에 설명되어 있습니다. 버퍼 오버런 검색에 대한 자세한 내용은 MSVC의 보안 기능을 참조하세요.
전문가 수동 코드 검토 또는 외부 분석이 함수가 버퍼 오버런으로부터 안전한지 확인할 수 있습니다. 이 경우 함수 선언에 키워드를 적용하여 __declspec(safebuffers)
함수에 대한 보안 검사를 표시하지 않을 수 있습니다.
주의
그러나 버퍼 보안 검사는 중요한 보안 보호를 제공하고 성능에 별다른 영향을 미치지 않으므로, 함수의 성능이 매우 중요하고 해당 함수의 안전성이 파악되는 드문 경우를 제외하고, 버퍼 보안 검사를 억제하지 않도록 권장합니다.
인라인 함수
주 함수는 인라인 키워드를 사용하여 보조 함수의 복사본을 삽입할 수 있습니다. 키워드가 __declspec(safebuffers)
함수에 적용되면 해당 함수에 대해 버퍼 오버런 검색이 표시되지 않습니다. 그러나 인라인 처리는 __declspec(safebuffers)
다음과 같은 방법으로 키워드에 영향을 줍니다.
/GS 컴파일러 옵션이 두 함수 모두에 대해 지정되었지만 주 함수가 키워드를 __declspec(safebuffers)
지정한다고 가정합니다. 보조 함수의 데이터 구조는 보안 검사를 가능하게 하기 때문에 이 함수는 보안 검사를 억제하지 않습니다. 이 경우 다음과 같습니다.
컴파일러 최적화에 관계없이 컴파일러가 해당 함수를 인라인으로 강제 적용하도록 보조 함수에 __forceinline 키워드를 지정합니다.
보조 함수는 보안 검사에 적합하므로 키워드를 지정하더라도 보안 검사가 기본 함수에도
__declspec(safebuffers)
적용됩니다.
예시
다음 코드에서는 키워드를 사용하는 __declspec(safebuffers)
방법을 보여줍니다.
// compile with: /c /GS
typedef struct {
int x[20];
} BUFFER;
static int checkBuffers() {
BUFFER cb;
// Use the buffer...
return 0;
};
static __declspec(safebuffers)
int noCheckBuffers() {
BUFFER ncb;
// Use the buffer...
return 0;
}
int wmain() {
checkBuffers();
noCheckBuffers();
return 0;
}
Microsoft 전용 종료
참고 항목
__declspec
키워드
inline, __inline, __forceinline
strict_gs_check