safebuffers
Khusus Microsoft
Memberi tahu pengkompilasi untuk tidak menyisipkan pemeriksaan keamanan overrun buffer untuk fungsi.
Sintaks
__declspec( safebuffers )
Keterangan
Opsi pengkompilasi /GS menyebabkan pengkompilasi menguji overruns buffer dengan menyisipkan pemeriksaan keamanan pada tumpukan. Jenis struktur data yang memenuhi syarat untuk pemeriksaan keamanan dijelaskan dalam /GS (Buffer Security Check). Untuk informasi selengkapnya tentang deteksi overrun buffer, lihat Fitur Keamanan di MSVC.
Tinjauan kode manual ahli atau analisis eksternal mungkin menentukan bahwa fungsi aman dari overrun buffer. Dalam hal ini, Anda dapat menekan pemeriksaan keamanan untuk fungsi dengan menerapkan __declspec(safebuffers)
kata kunci ke deklarasi fungsi.
Perhatian
Pemeriksaan keamanan buffer memberikan perlindungan keamanan penting dan memiliki pengaruh yang dapat diabaikan pada performa. Oleh karena itu, kami sarankan Anda tidak menekannya, kecuali dalam kasus yang jarang terjadi di mana performa fungsi menjadi perhatian penting dan fungsinya diketahui aman.
Fungsi Sebaris
Fungsi utama dapat menggunakan kata kunci inlininguntuk menyisipkan salinan fungsi sekunder. __declspec(safebuffers)
Jika kata kunci diterapkan ke fungsi, deteksi overrun buffer ditekan untuk fungsi tersebut. Namun, inlining memengaruhi __declspec(safebuffers)
kata kunci dengan cara berikut.
Misalkan opsi pengkompilasi /GS ditentukan untuk kedua fungsi, tetapi fungsi utama menentukan __declspec(safebuffers)
kata kunci. Struktur data dalam fungsi sekunder membuatnya memenuhi syarat untuk pemeriksaan keamanan, dan fungsi tidak menekan pemeriksaan tersebut. Dalam hal ini:
Tentukan kata kunci __forceinline pada fungsi sekunder untuk memaksa pengkompilasi sebaris fungsi tersebut terlepas dari pengoptimalan pengkompilasi.
Karena fungsi sekunder memenuhi syarat untuk pemeriksaan keamanan, pemeriksaan keamanan juga diterapkan ke fungsi utama meskipun menentukan
__declspec(safebuffers)
kata kunci.
Contoh
Kode berikut menunjukkan cara menggunakan __declspec(safebuffers)
kata kunci.
// compile with: /c /GS
typedef struct {
int x[20];
} BUFFER;
static int checkBuffers() {
BUFFER cb;
// Use the buffer...
return 0;
};
static __declspec(safebuffers)
int noCheckBuffers() {
BUFFER ncb;
// Use the buffer...
return 0;
}
int wmain() {
checkBuffers();
noCheckBuffers();
return 0;
}
END Khusus Microsoft
Baca juga
__declspec
Kata kunci
inline, __inline, __forceinline
strict_gs_check
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk