Udostępnij za pośrednictwem


/Qspectre-load

Określa generację kompilatora instrukcji serializacji dla każdej instrukcji ładowania. Ta opcja rozszerza flagę /Qspectre , zmniejszając ryzyko wszelkich możliwych ataków typu side-channel wykonywania spekulatywnego na podstawie obciążeń.

Składnia

/Qspectre-load

Uwagi

/Qspectre-load powoduje, że kompilator wykrywa obciążenia z pamięci i wstaw instrukcje serializacji po nich. Instrukcje przepływu sterowania, które ładują pamięć, w tym RET i CALL, 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 przepływu sterowania, 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 zatrzymuje spekulacje dotyczące wszystkich obciążeń, wpływ na wydajność 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)). Aby uzyskać więcej informacji, zobacz __declspec spectre.

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

Opcja /Qspectre-load 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-cf
/Q options (Operacje niskiego poziomu)
Opcje kompilatora MSVC
Składnia wiersza polecenia kompilatora MSVC