Sdílet prostřednictvím


/ 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

  1. Otevřete dialogové okno projektu Stránky vlastností.Další informace naleznete v tématu Setting Visual C++ Project Properties.

  2. Klepněte Linker složky.

  3. Klepněte příkazového řádku stránky vlastností.

  4. Zadejte možnost do Další možnosti pole.

Programově nastavit tuto možnost linker

Viz také

Referenční dokumentace

Nastavení možností Linker

Možnosti Linker