/Qspectre-load-cf
부하를 포함하는 모든 제어 흐름 명령에 대한 직렬화 명령의 컴파일러 생성을 지정합니다. 이 옵션은 /Qspectre 로드 옵션에 의해 수행되는 완화의 하위 집합을 수행합니다.
구문
/Qspectre-load-cf
설명
/Qspectre-load-cf를 사용하면 컴파일러가 메모리에서 로드되는 제어 흐름 명령을 검색JMP
RET
하고 CALL
로드 후 serialize 명령을 삽입합니다. 가능한 경우 이러한 지침은 부하 및 제어 흐름 전송으로 분할됩니다. 부하 뒤에 부하가 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-cf중지하기 때문에 성능에 미치는 영향이 높습니다. 완화는 모든 곳에서 적절하지 않습니다. 보호가 필요하지 않은 성능에 중요한 코드 블록이 있는 경우 .__declspec(spectre(nomitigation))
/Qspectre-load-cf옵션은 기본적으로 꺼져 있으며 모든 최적화 수준을 지원합니다.
/Qspectre-load-cf옵션은 Visual Studio 2019 버전 16.5 이상에서 사용할 수 있습니다. 이 옵션은 x86 및 x64 프로세서를 대상으로 하는 컴파일러에서만 사용할 수 있습니다. ARM 프로세서를 대상으로 하는 컴파일러에서는 사용할 수 없습니다.
Visual Studio 개발 환경에서 이 컴파일러 옵션을 설정하려면
프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 Visual Studio에서 C++ 컴파일러 및 빌드 속성 설정을 참조하세요.
구성 속성>C/C++>코드 생성 속성 페이지를 선택합니다.
Spectre 완화 속성에 대한 새 값을 선택합니다. 확인을 선택하여 변경 내용을 적용합니다.
프로그래밍 방식으로 이 컴파일러 옵션을 설정하려면
- AdditionalOptions을(를) 참조하세요.
참고 항목
/Qspectre
/Qspectre-jmp
/Qspectre-load
/Q 옵션(하위 수준 작업)
MSVC 컴파일러 옵션
MSVC 컴파일러 명령줄 구문