Aracılığıyla paylaş


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

/SAFESEH[:NO]

Zaman /SAFESEH belirtilen, bağlayıcı sadece üretmek resim görüntü güvenli özel durum işleyicileri bir tablo oluşturabilir.Bu tablo, işletim sisteminin hangi özel durum işleyicileri yansıma için geçerli olduğunu belirtir.

/SAFESEHx 86 için bağlanırken yalnızca geçerli olan hedefler./SAFESEHBelirtilen özel durum işleyicileri olan platformlar için desteklenmiyor.Örneğin, x64 ve ARM, tüm özel durum işleyicileri PDATA'de belirtilmiştir.ML64.exe ml64 işlevler bırakma olanak tanıyan görüntüye (XDATA ve PDATA) SEH bilgilerini göster ek açıklamalar eklemek için desteği vardır.Daha fazla bilgi için bkz. x64 (ml64.exe) için (MASM).

Yoksa /SAFESEH belirtilmezse, tüm modülleri güvenli özel durum işleme özelliği ile uyumlu olup olmadıklarını, bağlayıcı güvenli özel durum işleyicileri tablosu içeren bir görüntüyü üretmek.Tüm modülleri özelliği güvenli özel durum işleme ile uyumlu olsalar, sonuçta elde edilen görüntü güvenli özel durum işleyicileri tablosu içermiyor.Yoksa /SUBSYSTEM WINDOWSCE veya EFI_ * seçeneklerden birini belirtir bu alt sistemlerin hiçbiri yapabilirsiniz bağlayıcı güvenli özel durum işleyicileri tablosu ile bir görüntü oluşturmak çalışmayacaktır bilgileri kullanın.

Yoksa /SAFESEH:NO belirtilen, bağlayıcı değil üretmek güvenli özel durum işleyicileri tablosu içeren bir görüntüyü tüm modüller özellik Güvenli özel durum işleme ile uyumlu olsa bile.

Bir veya daha fazla bağlayıcı giriş dosyaları (modülleri) güvenli özel durum işleyicileri özelliği ile uyumlu olmadığı için bağlayıcı bir görüntü oluşturmak mümkün olmaması en yaygın nedeni.Güvenli özel durum işleyicileri ile uyumlu olmaya modülü için yaygın bir nedeni, Visual C++'ın önceki bir sürümünden bir derleyici ile oluşturulmuş olmasıdır.

Kullanarak yapılandırılmış özel durum işleyici olarak bir işlev kaydedebilirsiniz .SAFESEH.

Varolan bir işaretlemek mümkün değil ikili olarak güvenli özel durum işleyicileri (ya da hiçbir özel durum işleyicileri); Güvenli özel durum işleme hakkında bilgi yapı zamanında eklenmiş olması gerekir.

Bağlayıcı'nın Güvenli özel durum işleyicileri tablosunu yeteneği C çalışma zamanı kitaplığı kullanarak uygulamaya göre değişir.İle bağlantı varsa /NODEFAULTLIB ve güvenli özel durum işleyicileri tablosu istediğiniz, bir yük config yapı (CRT loadcfg.c kaynak dosyada bulunan gibi) sağlamanız gereken Visual C++ için tanımlanmış olan tüm girişleri içerir.Örneğin:

#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. Projenin Özellik Sayfaları iletişim kutusunu açın.Ayrıntılar için, bkz. Visual C++ Proje Özelliklerini Ayarlama.

  2. Bağlayıcı klasörünü seçin.

  3. Komut Satırı özellik sayfasını seçin.

  4. Seçenek içine girin Ek seçenekler kutusu.

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

Ayrıca bkz.

Başvuru

Bağlayıcı Seçeneklerini Ayarlama

Bağlayıcı Seçenekleri