/ safeseh (resim bulunan güvenli özel durum işleyicileri)
/SAFESEH[:NO]
Zaman /SAFESEH belirtilmişse, linker yalnızca üretmek görüntüyü görüntünün güvenli özel durum işleyicileri bir tablo oluşturabilir. Bu tablo için hangi özel durum işleyicilerini yansıma için geçerli işletim sistemini belirtir.
/SAFESEHx 86 için bağlanırken yalnızca geçerlidir hedefler. /SAFESEHzaten aksi belirtilmedikçe özel durum işleyicileri sahip platformları için desteklenmiyor. Örneğin, x64 ve Itanium, tüm özel durum işleyicileri pdata belirtilmiştir. ML64.exe (xdata ve pdata) seh bilgilerini göster ek açıklamalar eklemek için destek ml64 işlevleri rahatça olanak tanıyan görüntüye sahiptir. Daha fazla bilgi için bkz. masm x 64 (ml64.exe).
/SAFESEH Belirtilmezse, linker güvenli özel durum işleyicileri bir tablo içeren bir görüntüyü tüm modülleri güvenli özel durum işleme özelliğiyle uyumluysa üretmek. Tüm modülleri güvenli istisna işleme özelliği ile uyumlu değil, sonuçta elde edilen görüntü güvenli özel durum işleyicilerini tablosu içermez. /subsystem WINDOWSCE veya EFI_ * seçeneklerden birini belirtir alt sistemler hiçbiri yaptığınız linker güvenli özel durum işleyicileri bir tabloyla bir görüntü oluşturmak denemez bilgileri kullanın.
/SAFESEH:NO Belirtilmişse, linker değil üretmek güvenli özel durum işleyicileri bir tablo içeren bir görüntüyü bile tüm modülleri güvenli istisna işleme özelliği ile uyumludur.
Bir veya daha fazla bağlayıcı giriş dosyalarına (modülleri) güvenli özel durum işleyicileri özelliğiyle uyumlu olmadığı için bağlayıcı bir görüntü üretmek mümkün olmadığı için en yaygın nedenidir. Visual C++'ın önceki bir sürümünden bir derleyici ile oluşturulduğundan modülü güvenli özel durum işleyicileri ile uyumlu olmadığı için ortak bir nedenidir.
Kullanarak yapılandırılmış özel durum işleyicisi olarak bir işlev kaydedebilirsiniz .safeseh.
Varolan bir işaretlemek mümkün değil ikili olarak güvenli özel durum işleyicileri (veya hiçbir özel durum işleyicileri); Güvenli özel durum işleme hakkında bilgi derleme sırasında eklenmesi gerekir.
c çalışma zamanı kitaplığı kullanarak uygulama Bağlayıcısı'nın güvenli özel durum işleyicilerini tablosunu yeteneği bağlıdır. İle bağlanıyorsanız /NODEFAULTLIB ve güvenli özel durum işleyicileri bir tablosu istiyorsanız, yük config yapı (loadcfg.c crt kaynak dosyada bulunan gibi) sağlamanız gerekip 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ında bu bağlayıcı seçeneğini ayarlamak için
Projenin Özellik Sayfaları iletişim kutusunu açın. Ayrıntılı bilgi için bkz: Visual C++ proje özelliklerini ayarlama.
Tıklatın Linker klasörü.
Tıklatın komut satırı özellik sayfası.
Seçeneğine yazın Ek seçenekler kutusu.
Bu bağlayıcı seçeneği programlı olarak ayarlamak için
- Bkz: AdditionalOptions