/SAFESEH
(Image obsahuje bezpečné obslužné rutiny výjimek)
Pokud /SAFESEH
je zadán, linker vytvoří pouze image, pokud může také vytvořit tabulku bezpečných obslužných rutin výjimek image. Tato tabulka určuje operační systém, které obslužné rutiny výjimek jsou pro image platné.
Syntaxe
/SAFESEH
/SAFESEH:NO
Poznámky
/SAFESEH
je platný pouze při propojování cílů x86. /SAFESEH
nepodporuje platformy, které už mají uvedené obslužné rutiny výjimek. Například v x64 a ARM jsou všechny obslužné rutiny výjimek zaznamenány v PDATA. ML64.exe podporuje přidávání poznámek, které generují informace SEH (XDATA a PDATA) do bitové kopie a umožňují tak rozbalování pomocí funkcí ml64. Další informace najdete v masm pro platformu x64 (ml64.exe).
Pokud /SAFESEH
není zadaný, linker vytvoří image s tabulkou obslužných rutin bezpečných výjimek, pokud jsou všechny segmenty kódu kompatibilní s funkcí bezpečného zpracování výjimek. Pokud některé segmenty kódu nebyly kompatibilní s funkcí bezpečného zpracování výjimek, výsledný obrázek nebude obsahovat tabulku bezpečných obslužných rutin výjimek. Pokud /SUBSYSTEM
zadáte WINDOWSCE
nebo některou z EFI_*
možností, linker se nepokusí vytvořit image s tabulkou bezpečných výjimek, protože ani jeden z těchto subsystémů nemůže tyto informace využívat.
Pokud /SAFESEH:NO
je zadáno, linker nevygeneruje image s tabulkou bezpečných výjimek, i když jsou všechny segmenty kódu kompatibilní s funkcí bezpečného zpracování výjimek.
Nejběžnějším důvodem, proč linker nemůže vytvořit obrázek, je to, že jeden nebo více vstupních souborů do linkeru není kompatibilní s funkcí bezpečných obslužných rutin výjimek. Běžným důvodem, proč je kód nekompatibilní s bezpečnými obslužnými rutinami výjimek, je to, že byl vytvořen s kompilátorem z předchozí verze visual C++.
Funkci můžete také zaregistrovat jako obslužnou rutinu strukturované výjimky pomocí ..SAFESEH
Existující binární soubor není možné označit jako bezpečné obslužné rutiny výjimek (nebo žádné obslužné rutiny výjimek); informace o bezpečném zpracování výjimek musí být přidány v době sestavení.
Schopnost linkeru sestavit tabulku bezpečných obslužných rutin výjimek závisí na tom, zda aplikace používá knihovnu runtime jazyka C. Pokud propojíte a /NODEFAULTLIB
chcete vytvořit tabulku bezpečných obslužných rutin výjimek, musíte zadat strukturu konfigurace načtení (například ji najdete ve zdrojovém loadcfg.c
souboru CRT), která obsahuje všechny položky definované pro Visual C++. Příklad:
#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
};
Nastavení tohoto parametru linkeru ve vývojovém prostředí sady Visual Studio
Otevřete dialogové okno Stránky vlastností projektu. Další informace naleznete v tématu Nastavení vlastností kompilátoru a sestavení.
Vyberte stránku vlastností linkeru>>Konfigurace Upřesňující vlastnost.
Úprava image má vlastnost Bezpečné obslužné rutiny výjimek. Změny uložíte kliknutím na OK nebo Použít .
Programové nastavení tohoto parametru linkeru
- Viz třída AdditionalOptions.