Share via


/Gh (Activer la fonction de raccordement _penter)

Provoque un appel à la _penter fonction au début de chaque méthode ou fonction.

Syntaxe

/Gh

Notes

La _penter fonction ne fait pas partie d’une bibliothèque. C’est à vous de fournir une définition pour _penter.

Sauf si vous envisagez d’appeler _penterexplicitement, vous n’avez pas besoin de fournir un prototype. La fonction doit envoyer (push) le contenu de tous les registres à l’entrée et afficher le contenu inchangé à la sortie. Il doit apparaître comme s’il avait le prototype suivant :

void __declspec(naked) __cdecl _penter( void );

Cette déclaration n’est pas disponible pour les projets 64 bits.

Pour définir cette option du compilateur dans l'environnement de développement Visual Studio

  1. Ouvrez la boîte de dialogue Pages de propriété du projet. Pour plus d’informations, consultez Définir le compilateur C++ et les propriétés de build dans Visual Studio.

  2. Sélectionnez la page de propriétés Propriétés de configuration>C/C++>Ligne de commande.

  3. Entrez l’option du compilateur dans la zone Options supplémentaires.

Pour définir cette option du compilateur par programmation

Exemple

Le code suivant, lorsqu’il est compilé avec /Gh, montre comment _penter est appelé deux fois ; une fois lors de l’entrée de la fonction et une fois lors de l’entrée de la fonction mainx. L’exemple se compose de deux fichiers sources que vous compilez séparément.

Fichier source 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
    }
}

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

Lors de l’exécution, la fonction locale _penter est appelée à l’entrée et mainx:

In a function!
In a function!

Voir aussi

Options du compilateur MSVC
Syntaxe de ligne de commande du compilateur MSVC
/GH (Activer la fonction de raccordement _pexit)