/Gh (_penter-Hookfunktion aktivieren)

Bewirkt einen Aufruf der _penter Funktion am Anfang jeder Methode oder Funktion.

Syntax

/Gh

Hinweise

Die _penter Funktion ist nicht Teil einer Bibliothek. Es liegt an Ihnen, eine Definition für _penter.

Sofern Sie nicht explizit anrufen _pentermöchten, müssen Sie keinen Prototyp bereitstellen. Die Funktion muss den Inhalt aller Register beim Eintrag pushen und den unveränderten Inhalt beim Beenden auffüllen. Es muss so aussehen, als hätte er den folgenden Prototyp:

void __declspec(naked) __cdecl _penter( void );

Diese Deklaration ist für 64-Bit-Projekte nicht verfügbar.

So legen Sie diese Compileroption in der Visual Studio-Entwicklungsumgebung fest

  1. Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts. Weitere Informationen erhalten Sie unter Set C++ compiler and build properties in Visual Studio (Festlegen der Compiler- und Buildeigenschaften (C++) in Visual Studio).

  2. Klicken Sie auf der Eigenschaftenseite auf Konfigurationseigenschaften>C/C++>Befehlszeile.

  3. Geben Sie die Compileroption im Feld "Zusätzliche Optionen " ein.

So legen Sie diese Compileroption programmgesteuert fest

Beispiel

Der folgende Code, wenn er mit /Gh kompiliert wird, zeigt, wie _penter zweimal aufgerufen wird; einmal beim Eingeben der Funktion main und einmal beim Eingeben der Funktionx. Das Beispiel besteht aus zwei Quelldateien, die Sie separat kompilieren.

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

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

Wenn sie ausgeführt wird, wird die lokale _penter Funktion beim Eintrag zu main und x:

In a function!
In a function!

Siehe auch

MSVC-Compileroptionen
MSVC-Compiler-Befehlszeilensyntax
/GH (Aktivieren _pexit Hook-Funktion)