Рекомендуем использовать Visual Studio 2017

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

 

Самая актуальная документация по Visual Studio 2017: Документация по Visual Studio 2017.

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

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

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

void __declspec(naked) _cdecl _penter( void );  

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

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

  1. Откройте диалоговое окно Страницы свойств проекта. Дополнительные сведения см. в разделе Открытие свойств страниц проекта.

  2. Откройте папку C/C++.

  3. Выберите страницу свойств Командная строка.

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

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

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

// Gh_compiler_option.cpp  
// compile with: /Gh  
// processor: x86  
#include <stdio.h>  
void x() {}  
  
int main() {  
   x();  
}  
  
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  
    }  
}  

В function!
В function!

Параметры компилятора
Настройка параметров компилятора

Показ: