/Qspectre-load

Spécifie la génération du compilateur d’instructions de sérialisation pour chaque instruction de chargement. Cette option étend l’indicateur /Qspectre , en atténuant les attaques possibles par canal latéral d’exécution spéculative en fonction des charges.

Syntaxe

/Qspectre-load

Notes

/Qspectre-load provoque la détection des charges à partir de la mémoire et l’insertion d’instructions de sérialisation après celles-ci. Les instructions de flux de contrôle qui chargent la mémoire, y compris RET et CALL, sont fractionnées en une charge et un transfert de flux de contrôle. La charge est suivie d’un LFENCE élément pour vous assurer que la charge est protégée. Il existe des cas où le compilateur ne peut pas fractionner les instructions de flux de contrôle, telles que l’instruction jmp , afin qu’il utilise une autre technique d’atténuation. Par exemple, le compilateur atténue en ajoutant des jmp [rax] instructions pour charger la cible de manière nonstructive avant d’insérer une LFENCE, comme illustré ici :

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

Étant donné que /Qspectre-load arrête la spéculation de toutes les charges, l’impact sur les performances est élevé. L’atténuation n’est pas appropriée partout. S’il existe des blocs de code critiques de performances qui ne nécessitent pas de protection, vous pouvez désactiver ces atténuations à l’aide __declspec(spectre(nomitigation))de . Pour plus d’informations, consultez __declspec spectre.

L’option /Qspectre-load est désactivée par défaut et prend en charge tous les niveaux d’optimisation.

L’option /Qspectre-load est disponible dans Visual Studio 2019 version 16.5 et versions ultérieures. Cette option est disponible uniquement dans les compilateurs qui ciblent des processeurs x86 et x64. Il n’est pas disponible dans les compilateurs qui ciblent les processeurs ARM.

Pour définir cette option du compilateur dans l'environnement de développement Visual Studio

  1. Ouvrez la boîte de dialogue Pages de propriété du projet. Pour plus d’informations, consultez Définir le compilateur C++ et les propriétés de build dans Visual Studio.

  2. Sélectionnez la page de propriétés De configuration>C/C++>Génération de code.

  3. Sélectionnez une nouvelle valeur pour la propriété Spectre Mitigation . Choisissez OK pour appliquer le changement.

Pour définir cette option du compilateur par programmation

Voir aussi

/Qspectre
/Qspectre-jmp
/Qspectre-load-cf
Options /Q (opérations de bas niveau)
Options du compilateur MSVC
Syntaxe de ligne de commande du compilateur MSVC