Bagikan melalui


/Qspectre-load

Menentukan pembuatan pengkompilasi instruksi serialisasi untuk setiap instruksi beban. Opsi ini memperluas bendera /Qspectre , mengurangi kemungkinan serangan saluran samping eksekusi spekulatif berdasarkan beban.

Sintaks

/Qspectre-load

Keterangan

/Qspectre-load menyebabkan pengkompilasi mendeteksi beban dari memori, dan menyisipkan instruksi serialisasi setelahnya. Instruksi alur kontrol yang memuat memori, termasuk RET dan CALL, dibagi menjadi beban dan transfer alur kontrol. Beban diikuti oleh LFENCE untuk memastikan beban dilindungi. Ada kasus di mana pengkompilasi tidak dapat membagi instruksi alur kontrol, seperti jmp instruksi, sehingga menggunakan teknik mitigasi alternatif. Misalnya, kompilator jmp [rax] mengurangi dengan menambahkan instruksi untuk memuat target secara nondestructive sebelum menyisipkan LFENCE, seperti yang ditunjukkan di sini:

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

Karena /Qspectre-load menghentikan spekulasi semua beban, dampak performanya tinggi. Mitigasi tidak sesuai di mana-mana. Jika ada blok kode penting performa yang tidak memerlukan perlindungan, Anda dapat menonaktifkan mitigasi ini dengan menggunakan __declspec(spectre(nomitigation)). Untuk informasi selengkapnya, lihat __declspec spectre.

Opsi /Qspectre-load nonaktif secara default, dan mendukung semua tingkat pengoptimalan.

Opsi /Qspectre-load tersedia di Visual Studio 2019 versi 16.5 dan yang lebih baru. Opsi ini hanya tersedia di pengkompilasi yang menargetkan prosesor x86 dan x64. Ini tidak tersedia di pengkompilasi yang menargetkan prosesor ARM.

Untuk mengatur opsi pengkompilasi ini di lingkungan pengembangan Visual Studio

  1. Buka kotak dialog Halaman Properti proyek. Untuk detailnya, lihat Mengatur pengkompilasi C++ dan membuat properti di Visual Studio.

  2. Pilih halaman properti Properti>Konfigurasi C/C++>Code Generation.

  3. Pilih nilai baru untuk properti Spectre Mitigation . Pilih OK untuk menerapkan perubahan.

Untuk mengatur opsi pengkompilasi ini secara terprogram

Baca juga

/Qspectre
/Qspectre-jmp
/Qspectre-load-cf
Opsi /Q (Operasi Tingkat Rendah)
Opsi pengkompilasi MSVC
Sintaks baris perintah pengkompilasi MSVC