/ SAFESEH (obrázek má bezpečné popisovačích výjimek)
/SAFESEH[:NO]
Při /SAFESEH je určena vytvořeném propojovacím bude pouze vytvořili obraz, pokud jej můžete vytvořit tabulku obslužné podprocesy bezpečné výjimek obrazu.Tato tabulka určuje popisovačích výjimek, které jsou platné pro bitovou kopii operačního systému.
/SAFESEHje platná pouze při propojení pro x 86 cíle./SAFESEHnení podporována pro platformy, které již popisovačích výjimek poznamenat.Například na x64 a Itanium, jsou uvedeny všechny obslužné podprocesy výjimek v PDATA.ML64.exe obsahuje podporu pro přidávání poznámek, které generuje informace SEH (XDATA a PDATA) do obrazu a umožňuje unwind prostřednictvím funkce ml64.Další informace naleznete v tématu Jazyk MASM pro platformu x 64 (ml64.exe).
Pokud /SAFESEH není zadána, vytvořeném propojovacím vytvoří obraz s tabulkou obslužné rutiny výjimky bezpečné-li všechny moduly, které jsou kompatibilní s funkcí zpracování výjimek v nouzovém.Pokud nebyly všechny moduly kompatibilní s výjimkou bezpečné, manipulace, výsledný obraz nesmí obsahovat tabulku popisovačích výjimek bezpečné.Pokud /SUBSYSTEM určuje WINDOWSCE nebo jednu z možností EFI_ * vytvořeném propojovacím nebude pokoušet vytvářet bitové kopie pomocí tabulky výjimek bezpečné obsluhy, ani jedno z těchto subsystémů lze provést pomocí informací.
Pokud /SAFESEH:NO je určena vytvořeném propojovacím nevytvoří obrazu s tabulkou obslužné podprocesy bezpečné výjimky i v případě, že jsou všechny moduly kompatibilní s výjimkou bezpečné manipulace.
Nejčastější příčinou linker nemůže vytvořit obraz je protože jeden nebo více vstupních souborů (moduly) vytvořeném propojovacím není kompatibilní s funkcí obslužné podprocesy bezpečné výjimku.Častým důvodem pro modul nebude kompatibilní s popisovačích výjimek bezpečné je, protože byl vytvořen pomocí kompilátoru z předchozí verze aplikace Visual C++.
Můžete se také zaregistrovat funkci jako obslužné rutiny strukturované výjimky pomocí .SAFESEH.
Není možné označit existující binární jako výjimka bezpečné obsluhy (nebo žádné obslužné podprocesy výjimek); sestavení musí být přidána informace o zpracování výjimek bezpečné.
Linker schopnost sestavit popisovačích výjimek bezpečné závisí na aplikaci pomocí c runtime library.Pokud propojíte s /NODEFAULTLIB a chcete tabulku popisovačích výjimek bezpečné, je třeba zadat struktura config zatížení (například lze nalézt ve zdrojovém souboru loadcfg.c CRT), který obsahuje všechny položky, které jsou definovány 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í této možnosti linker ve vývojovém prostředí Visual Studio
Otevřete dialogové okno projektu Stránky vlastností.Další informace naleznete v tématu Setting Visual C++ Project Properties.
Klepněte Linker složky.
Klepněte příkazového řádku stránky vlastností.
Zadejte možnost do Další možnosti pole.
Programově nastavit tuto možnost linker
- Viz téma AdditionalOptions.