Udostępnij za pośrednictwem


/Qspectre-load-cf

Określa generację kompilatora instrukcji serializacji dla każdej instrukcji przepływu sterowania zawierającej obciążenie. Ta opcja wykonuje podzestaw środków zaradczych wykonywanych przez /Qspectre-load opcji.

Składnia

/Qspectre-load-cf

Uwagi

/Qspectre-load-cf powoduje, że kompilator wykrywa JMPinstrukcje dotyczące przepływu sterowania, RETktóre CALL ładują się z pamięci, oraz wstawia instrukcje serializacji po załadowaniu. Jeśli to możliwe, te instrukcje są podzielone na obciążenie i transfer przepływu sterowania. Po obciążeniu następuje element , LFENCE aby upewnić się, że obciążenie jest chronione. Istnieją przypadki, w których kompilator nie może podzielić instrukcji, takich jak JMP instrukcja, więc używa alternatywnej techniki ograniczania ryzyka. Na przykład kompilator ogranicza możliwość jmp [rax] dodawania instrukcji w celu załadowania obiektu docelowego bez struktury przed wstawieniem LFENCE, jak pokazano poniżej:

    xor rbx, [rax]
    xor rbx, [rax]  ; force a load of [rax]
    lfence          ; followed by an LFENCE
    jmp [rax]

Ponieważ /Qspectre-load-cf zatrzymuje spekulacje dotyczące wszystkich obciążeń w instrukcjach przepływu sterowania, wpływ wydajności jest wysoki. Środki zaradcze nie są odpowiednie wszędzie. Jeśli istnieją krytyczne dla wydajności bloki kodu, które nie wymagają ochrony, możesz wyłączyć te środki zaradcze przy użyciu polecenia __declspec(spectre(nomitigation)).

Opcja /Qspectre-load-cf jest domyślnie wyłączona i obsługuje wszystkie poziomy optymalizacji.

Opcja /Qspectre-load-cf jest dostępna w programie Visual Studio 2019 w wersji 16.5 lub nowszej. Ta opcja jest dostępna tylko w kompilatorach przeznaczonych dla procesorów x86 i x64. Nie jest ona dostępna w kompilatorach przeznaczonych dla procesorów ARM.

Aby ustawić tę opcję kompilatora w środowisku programowania Visual Studio

  1. Otwórz okno dialogowe Strony właściwości projektu. Aby uzyskać szczegółowe informacje, zobacz Set C++ compiler and build properties in Visual Studio (Ustawianie właściwości kompilatora języka C++ i kompilowania w programie Visual Studio).

  2. Wybierz stronę właściwości Właściwości>konfiguracji C/C++>Code Generation.

  3. Wybierz nową wartość właściwości Środki zaradcze Spectre. Wybierz przycisk OK , aby zastosować zmianę.

Aby programowo ustawić tę opcję kompilatora

Zobacz też

/Qspectre
/Qspectre-jmp
/Qspectre-load
/Q options (Operacje niskiego poziomu)
Opcje kompilatora MSVC
Składnia wiersza polecenia kompilatora MSVC