Udostępnij za pośrednictwem


/Gh (Włącz funkcję _penter Hook)

Powoduje wywołanie _penter funkcji na początku każdej metody lub funkcji.

Składnia

/Gh

Uwagi

Funkcja _penter nie jest częścią żadnej biblioteki. Wystarczy podać definicję dla _penterelementu .

Jeśli nie planujesz jawnie wywołać _pentermetody , nie musisz udostępniać prototypu. Funkcja musi wypchnąć zawartość wszystkich rejestrów we wpisie i wyskakować niezmienioną zawartość po zakończeniu. Musi wyglądać tak, jakby miał następujący prototyp:

void __declspec(naked) __cdecl _penter( void );

Ta deklaracja nie jest dostępna dla projektów 64-bitowych.

Aby ustawić tę opcję kompilatora w środowisku programowania Visual Studio

  1. Otwórz okno dialogowe Strony właściwości projektu. Aby uzyskać szczegółowe informacje, zobacz Set C++ compiler and build properties in Visual Studio (Ustawianie właściwości kompilatora języka C++ i kompilowania w programie Visual Studio).

  2. Wybierz stronę Właściwości>konfiguracji C/C++>Wiersza polecenia.

  3. Wprowadź opcję kompilatora w polu Dodatkowe opcje .

Aby programowo ustawić tę opcję kompilatora

Przykład

Poniższy kod, podczas kompilacji z /Gh, pokazuje, jak _penter jest wywoływany dwa razy; raz podczas wprowadzania funkcji main i raz podczas wprowadzania funkcji x. Przykład składa się z dwóch plików źródłowych, które są kompilowane oddzielnie.

Plik local_penter.cppźródłowy:

// 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
    }
}

Plik Gh_compiler_option.cppźródłowy:

// 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();
}

Po uruchomieniu funkcja lokalna _penter jest wywoływana przy wpisie do main i x:

In a function!
In a function!

Zobacz też

Opcje kompilatora MSVC
Składnia wiersza polecenia kompilatora MSVC
/GH (Włącz funkcję _pexit hook)