/Qspectre-load
Specifica la generazione del compilatore di istruzioni di serializzazione per ogni istruzione di caricamento. Questa opzione estende il flag /Qspectre , attenuando eventuali attacchi di esecuzione speculativa lato canale in base ai carichi.
Sintassi
/Qspectre-load
Osservazioni:
/Qspectre-load fa sì che il compilatore rilevi i carichi dalla memoria e inserisca le istruzioni di serializzazione dopo di esse. Le istruzioni del flusso di controllo che caricano la memoria, incluse RET
e CALL
, vengono suddivise in un carico e in un trasferimento del flusso di controllo. Il carico è seguito da un oggetto LFENCE
per assicurarsi che il carico sia protetto. In alcuni casi il compilatore non può dividere le istruzioni del flusso di controllo, ad esempio l'istruzione jmp
, quindi usa una tecnica di mitigazione alternativa. Ad esempio, il compilatore attenua jmp [rax]
aggiungendo istruzioni per caricare la destinazione in modo non distruttivo prima di inserire un LFENCE, come illustrato di seguito:
xor rbx, [rax]
xor rbx, [rax] ; force a load of [rax]
lfence ; followed by an LFENCE
jmp [rax]
Poiché /Qspectre-load interrompe la speculazione di tutti i carichi, l'impatto sulle prestazioni è elevato. La mitigazione non è appropriata ovunque. Se sono presenti blocchi critici per le prestazioni del codice che non richiedono la protezione, è possibile disabilitare queste mitigazioni usando __declspec(spectre(nomitigation))
. Per altre informazioni, vedere __declspec spettro.
L'opzione /Qspectre-load è disattivata per impostazione predefinita e supporta tutti i livelli di ottimizzazione.
L'opzione /Qspectre-load è disponibile in Visual Studio 2019 versione 16.5 e successive. Questa opzione è disponibile solo nei compilatori destinati a processori x86 e x64. Non è disponibile nei compilatori destinati ai processori ARM.
Per impostare l'opzione del compilatore nell'ambiente di sviluppo di Visual Studio
Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per informazioni dettagliate, vedere Impostare il compilatore e le proprietà di compilazione.
Selezionare la pagina delle proprietà Proprietà>di configurazione C/C++>Generazione codice.
Selezionare un nuovo valore per la proprietà Spectre Mitigation . Scegliere OK per applicare la modifica.
Per impostare l'opzione del compilatore a livello di codice
- Vedere AdditionalOptions.
Vedi anche
/Qspectre
/Qspectre-jmp
/Qspectre-load-cf
Opzioni /Q (operazioni di basso livello)
Opzioni del compilatore MSVC
Sintassi della riga di comando del compilatore MSVC