Bagikan melalui


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