/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

  1. Otevřete dialogové okno Stránky vlastností projektu. Další informace naleznete v tématu Nastavení vlastností kompilátoru a sestavení.

  2. Vyberte stránku vlastností linkeru>>Konfigurace Upřesňující vlastnost.

  3. Ú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 také

Referenční zdroje k linkeru MSVC
Možnosti linkeru MSVC