/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
Projenin Özellik Sayfaları iletişim kutusunu açın.Ayrıntılar için, bkz. Visual C++ Proje Özelliklerini Ayarlama.
Bağlayıcı klasörünü seçin.
Komut Satırı özellik sayfasını seçin.
Seçenek içine girin Ek seçenekler kutusu.
Bu bağlayıcı seçeneğini program aracılığıyla ayarlamak için
- Bkz. AdditionalOptions.