/Gh (Enable _penter Hook Function)
Collapse the table of content
Expand the table of content
Important This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here. ArchiveDisclaimer

/Gh (Enable _penter Hook Function)


This option causes a call to the _penter function at the start of every method or function. The _penter function is not part of any library and it is up to you to provide a definition for _penter.

Unless you plan to explicitly call _penter, you do not need to provide a prototype. The function must appear as if it had the following prototype, and it must push the content of all registers on entry and pop the unchanged content on exit:

void __declspec(naked) _cdecl _penter( void );

The following code, when compiled with /Gh shows how _penter is called twice; once when entering function main and once when entering function x.

#include "stdio.h"

void x(){ }

int main() {

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

   printf("\nIn a function!");

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

To set this compiler option in the Visual Studio development environment

  1. Open the project's Property Pages dialog box. For details, see Setting Visual C++ Project Properties.
  2. Click the C/C++ folder.
  3. Click the Command Line property page.
  4. Type the compiler option in the Additional Options box.

To set this compiler option programmatically

See AdditionalOptions.

See Also

Compiler Options | Setting Compiler Options

© 2015 Microsoft