Поделиться через


/Gh (включение функции-обработчика _penter)

Вызывает вызов _penter функции в начале каждого метода или функции.

Синтаксис

/Gh

Замечания

Функция _penter не является частью любой библиотеки. Это до вас, чтобы указать определение для _penter.

Если вы не планируете явно вызывать _penter, вам не нужно предоставлять прототип. Функция должна отправлять содержимое всех регистров при входе и появляется неизменное содержимое при выходе. Он должен выглядеть так, как если бы он имел следующий прототип:

void __declspec(naked) __cdecl _penter( void );

Это объявление недоступно для 64-разрядных проектов.

Установка данного параметра компилятора в среде разработки Visual Studio

  1. Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.

  2. Перейдите на страницу свойств Свойства конфигурации>C/C++>Командная строка.

  3. Введите параметр компилятора в поле "Дополнительные параметры ".

Установка данного параметра компилятора программным способом

Пример

Следующий код при компиляции с / Gh показывает, как _penter вызывается дважды; один раз при вводе функции main и один раз при вводе функции x. Пример состоит из двух исходных файлов, которые компилируются отдельно.

Исходный файл 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
    }
}

Исходный файл 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();
}

При выполнении локальная _penter функция вызывается при входе main и x:

In a function!
In a function!

См. также

Параметры компилятора MSVC
Синтаксис командной строки компилятора MSVC
/GH (Включить функцию перехватчика _pexit)