/Qspectre-load
모든 부하 명령에 대한 직렬화 명령의 컴파일러 생성을 지정합니다. 이 옵션은 /Qspectre 플래그를 확장하여 부하에 따라 가능한 투기적 실행 사이드 채널 공격을 완화합니다.
구문
/Qspectre-load
설명
/Qspectre-load 를 사용하면 컴파일러가 메모리에서 부하를 검색하고 그 뒤에 직렬화 명령을 삽입합니다. 메모리 RET
를 로드하고 CALL
로드하는 제어 흐름 지침은 부하 및 제어 흐름 전송으로 분할됩니다. 부하 뒤에 부하가 LFENCE
보호되는지 확인합니다. 컴파일러가 명령과 같은 jmp
제어 흐름 지침을 분할할 수 없으므로 대체 완화 기술을 사용하는 경우가 있습니다. 예를 들어 컴파일러는 다음과 같이 LFENCE를 삽입하기 전에 대상을 비파괴적으로 로드하는 지침을 추가하여 완화 jmp [rax]
합니다.
xor rbx, [rax]
xor rbx, [rax] ; force a load of [rax]
lfence ; followed by an LFENCE
jmp [rax]
/Qspectre-load는 모든 부하의 추측을 중지하므로 성능에 미치는 영향이 높습니다. 완화는 모든 곳에서 적절하지 않습니다. 보호가 필요하지 않은 성능에 중요한 코드 블록이 있는 경우 .__declspec(spectre(nomitigation))
자세한 내용은 __declspec 스펙터를 참조하세요.
/Qspectre 로드 옵션은 기본적으로 해제되어 있으며 모든 최적화 수준을 지원합니다.
/Qspectre 로드 옵션은 Visual Studio 2019 버전 16.5 이상에서 사용할 수 있습니다. 이 옵션은 x86 및 x64 프로세서를 대상으로 하는 컴파일러에서만 사용할 수 있습니다. ARM 프로세서를 대상으로 하는 컴파일러에서는 사용할 수 없습니다.
Visual Studio 개발 환경에서 이 컴파일러 옵션을 설정하려면
프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 Visual Studio에서 C++ 컴파일러 및 빌드 속성 설정을 참조하세요.
구성 속성>C/C++>코드 생성 속성 페이지를 선택합니다.
Spectre 완화 속성에 대한 새 값을 선택합니다. 확인을 선택하여 변경 내용을 적용합니다.
프로그래밍 방식으로 이 컴파일러 옵션을 설정하려면
- AdditionalOptions을(를) 참조하세요.
참고 항목
/Qspectre
/Qspectre-jmp
/Qspectre-load-cf
/Q 옵션(하위 수준 작업)
MSVC 컴파일러 옵션
MSVC 컴파일러 명령줄 구문