Partilhar via


/Gh (habilitar função de gancho _penter)

Causa uma chamada para a função _penter no início de cada método ou função.

Sintaxe

/Gh

Comentários

A função _penter não faz parte de nenhuma biblioteca. Cabe a você fornecer uma definição para _penter.

A menos que planeje chamar _penter explicitamente, não é necessário fornecer um protótipo. A função deve efetuar push do conteúdo de todos os registros na entrada e exibir o conteúdo inalterado na saída. Ela deve aparecer como se tivesse o seguinte protótipo:

void __declspec(naked) __cdecl _penter( void );

Essa declaração não está disponível para projetos de 64 bits.

Para definir esta opção do compilador no ambiente de desenvolvimento do Visual Studio

  1. Abra a caixa de diálogo Páginas de Propriedades do projeto. Para obter detalhes, confira Definir as propriedades de build e do compilador do C++ no Visual Studio.

  2. Selecione a página de propriedades Propriedades de Configuração>C/C++>Linha de Comando.

  3. Digite a opção do compilador na caixa Opções Adicionais.

Para definir essa opção do compilador via programação

Exemplo

O código a seguir, quando compilado com /Gh, mostra como _penter é chamado duas vezes; uma vez ao inserir a função main e uma vez ao entrar na função x. O exemplo consiste em dois arquivos de origem, que você deve compilar separadamente.

Arquivo de origem local_penter.cpp:

// local_penter.cpp
// compile with: cl /EHsc /c local_penter.cpp
// processor: x86
#include <stdio.h>

extern "C" void __declspec(naked) __cdecl _penter( void ) {
   _asm {
      push eax
      push ebx
      push ecx
      push edx
      push ebp
      push edi
      push esi
    }

   printf_s("\nIn a function!");

   _asm {
      pop esi
      pop edi
      pop ebp
      pop edx
      pop ecx
      pop ebx
      pop eax
      ret
    }
}

Arquivo de origem Gh_compiler_option.cpp:

// Gh_compiler_option.cpp
// compile with: cl /EHsc /Gh Gh_compiler_option.cpp local_penter.obj
// processor: x86
#include <stdio.h>

void x() {}

int main() {
   x();
}

Quando executada, a função local _penter é chamada na entrada para main e x:

In a function!
In a function!

Confira também

Opções do compilador MSVC
Sintaxe de linha de comando do compilador MSVC
/GH (Habilitar função de gancho _pexit)