Share via


/ SAFESEH (imagem tem manipuladores de exceção segura)

/SAFESEH[:NO]

Quando /SAFESEH for especificado, o vinculador produzirá uma imagem somente se também pode produzir um índice de manipuladores de exceção segura da imagem. Esta tabela especifica para o sistema operacional que manipuladores de exceção são válido da imagem.

/SAFESEH só é válido ao vincular para x86 destinos. /SAFESEH Não há suporte para plataformas que já tenham manipuladores de exceção observados. Por exemplo, em x64 e Itanium, todos os manipuladores de exceção são registrados no PDATA. ML64.exe tem suporte para adicionar anotações emitem informações de SEH (XDATA e PDATA) na imagem, permitindo que você através das funções ml64 de desenrolamento.Consulte MASM para x64 (ml64.exe) para obter mais informações.

If /SAFESEH não é especificado, o vinculador produzirá uma imagem com uma tabela de manipuladores de exceções segura se todos os módulos são compatível com o recurso de manipulação de exceção segura. Se todos os módulos não eram compatível com o recurso de manipulação de exceção segura, a imagem resultante não conterá uma tabela de manipuladores de exceção segura.If / SUBSISTEMA Especifica WINDOWSCE ou uma das opções EFI_ *, o vinculador não tentará produzir uma imagem com uma tabela de manipuladores de exceções de segurança, sistema autônomo nenhuma esses subsistemas podem tornar usar sistema autônomo informações.

If /SAFESEH:NO for especificado, o vinculador não produzirá uma imagem com uma tabela de manipuladores de exceções de segurança, mesmo se todos os módulos são compatível com o recurso de manipulação de exceções segura.

O motivo mais comum para o vinculador a não ser capaz de produzir uma imagem é porque um ou mais dos arquivos de entrada (módulos) para o vinculador não era compatível com o recurso de manipuladores de exceção segura.Uma razão comum para um módulo de não ser compatível com manipuladores de exceção segura é porque ele foi criado com um compilador de uma versão anterior do Visual C++.

Você também pode registrar uma função sistema autônomo um manipulador de exceção estruturada usando .SAFESEH.

In Microsoft Visual C++ 2005 não é possível marcar um binário existente sistema autônomo tendo manipuladores de exceção segura (ou sem manipuladores de exceção), informações sobre segura deve ser de manipulação de exceção possível adicionar ao time de compilação.

Capacidade do vinculador para criar uma tabela de manipuladores de exceção segura depende do aplicativo usando a biblioteca C tempo de execução.Se você vincular com / NODEFAULTLIB e deseja uma tabela de manipuladores de exceção segura, você precisa fornecer uma struct de configuração de carga (sistema autônomo podem ser encontradas no arquivo de fonte CRT loadcfg.c) que contém todas sistema autônomo entradas definidas para o Visual C++.Por exemplo:

#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
};

Para conjunto esta opção de vinculador no ambiente de desenvolvimento do Visual Studio

  1. em aberto propriedade Páginas caixa de diálogo.Para obter detalhes, consulte Definindo propriedades do Visual C++ projeto.

  2. clicar no Vinculador pasta.

  3. clicar no Linha de comando página de propriedades.

  4. Digite a opção para o Opções adicionais box.

Para conjunto esta opção de vinculador programaticamente

Consulte também

Referência

Definindo opções do vinculador

Opções do Vinculador