Share via


/SAFESEH(Görüntüde Kasa Özel Durum İşleyicileri var)

Belirtildiğinde /SAFESEH , bağlayıcı yalnızca görüntünün güvenli özel durum işleyicilerinin bir tablosunu da üretebiliyorsa bir görüntü oluşturur. Bu tablo, görüntü için hangi özel durum işleyicilerinin geçerli olduğunu işletim sistemine belirtir.

Sözdizimi

/SAFESEH
/SAFESEH:NO

Açıklamalar

/SAFESEH yalnızca x86 hedefleri için bağlanırken geçerlidir. /SAFESEH zaten özel durum işleyicileri belirtilen platformlar için desteklenmez. Örneğin, x64 ve ARM'de tüm özel durum işleyicileri PDATA'da not edilir. ML64.exe, görüntüye SEH bilgileri (XDATA ve PDATA) yayan ek açıklamalar ekleme desteğine sahiptir ve ml64 işlevlerinde geri sarmanızı sağlar. Daha fazla bilgi için bkz . x64 için MASM (ml64.exe).

Belirtilmezse /SAFESEH , tüm kod kesimleri güvenli özel durum işleme özelliğiyle uyumluysa bağlayıcı, güvenli özel durum işleyicileri tablosuyla bir görüntü oluşturur. Herhangi bir kod kesimi güvenli özel durum işleme özelliğiyle uyumlu değilse, sonuçta elde edilen görüntü güvenli özel durum işleyicileri tablosu içermez. Seçeneklerden birini EFI_* veya belirtirse /SUBSYSTEMWINDOWSCE, bağlayıcı güvenli özel durum işleyicileri tablosuna sahip bir görüntü oluşturmayı denemez, çünkü bu alt sistemlerin hiçbiri bu bilgileri kullanamaz.

Belirtilirse /SAFESEH:NO , bağlayıcı, tüm kod kesimleri güvenli özel durum işleme özelliğiyle uyumlu olsa bile güvenli özel durum işleyicileri tablosuna sahip bir görüntü üretmez.

Bağlayıcının görüntü oluşturamamasının en yaygın nedeni, bağlayıcıya yönelik bir veya daha fazla giriş dosyasının güvenli özel durum işleyicileri özelliğiyle uyumsuz olmasıdır. Kodun güvenli özel durum işleyicileriyle uyumsuz olmasının yaygın nedenlerinden biri, Visual C++'ın önceki bir sürümünden bir derleyiciyle oluşturulmuş olmasıdır.

Ayrıca kullanarak bir işlevi yapılandırılmış özel durum işleyicisi olarak kaydedebilirsiniz .SAFESEH.

Mevcut bir ikiliyi güvenli özel durum işleyicileri (veya özel durum işleyicileri yok) olarak işaretlemek mümkün değildir; derleme zamanında güvenli özel durum işleme bilgileri eklenmelidir.

Bağlayıcının güvenli özel durum işleyicileri tablosu oluşturabilmesi, C çalışma zamanı kitaplığını kullanan uygulamaya bağlıdır. ile /NODEFAULTLIB bağlantı ve güvenli özel durum işleyicileri tablosu istiyorsanız, Visual C++ için tanımlanan tüm girdileri içeren bir yük yapılandırma yapısı (örneğin, CRT kaynak dosyasında bulunabilir loadcfg.c ) sağlamanız gerekir. Örnek:

#include <windows.h>
extern DWORD_PTR __security_cookie;  /* /GS security cookie */

/*
* The following two names are automatically created by the linker for any
* image that has the safe exception table present.
*/

extern PVOID __safe_se_handler_table[]; /* base of safe handler entry table */
extern BYTE  __safe_se_handler_count;  /* absolute symbol whose address is
                                           the count of table entries */
typedef struct {
    DWORD       Size;
    DWORD       TimeDateStamp;
    WORD        MajorVersion;
    WORD        MinorVersion;
    DWORD       GlobalFlagsClear;
    DWORD       GlobalFlagsSet;
    DWORD       CriticalSectionDefaultTimeout;
    DWORD       DeCommitFreeBlockThreshold;
    DWORD       DeCommitTotalFreeThreshold;
    DWORD       LockPrefixTable;            // VA
    DWORD       MaximumAllocationSize;
    DWORD       VirtualMemoryThreshold;
    DWORD       ProcessHeapFlags;
    DWORD       ProcessAffinityMask;
    WORD        CSDVersion;
    WORD        Reserved1;
    DWORD       EditList;                   // VA
    DWORD_PTR   *SecurityCookie;
    PVOID       *SEHandlerTable;
    DWORD       SEHandlerCount;
} IMAGE_LOAD_CONFIG_DIRECTORY32_2;

const IMAGE_LOAD_CONFIG_DIRECTORY32_2 _load_config_used = {
    sizeof(IMAGE_LOAD_CONFIG_DIRECTORY32_2),
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    &__security_cookie,
    __safe_se_handler_table,
    (DWORD)(DWORD_PTR) &__safe_se_handler_count
};

Visual Studio geliştirme ortamındaki bu bağlayıcı seçeneğini ayarlamak için

  1. Proje için Özellik Sayfaları iletişim kutusunu açın. Daha fazla bilgi için bkz . Derleyici ve derleme özelliklerini ayarlama.

  2. Yapılandırma Özellikleri>Bağlayıcısı>Gelişmiş özellik sayfasını seçin.

  3. Görüntüde Kasa Özel Durum İşleyicileri var özelliğini değiştirin. Değişikliklerinizi kaydetmek için Tamam'ı veya Uygula'yı seçin.

Bu bağlayıcı seçeneğini program aracılığıyla ayarlamak için

Ayrıca bkz.

MSVC bağlayıcı başvurusu
MSVC bağlayıcı seçenekleri