/Gh(_penter 후크 함수 사용)

모든 메서드 또는 함수가 _penter 시작될 때 함수를 호출합니다.

구문

/Gh

설명

함수는 _penter 라이브러리의 일부가 아닙니다. 에 대한 정의를 제공하는 것은 사용자에게 달려 있습니다 _penter.

명시적으로 호출 _penter하지 않는 한 프로토타입을 제공할 필요가 없습니다. 함수는 항목에서 모든 레지스터의 콘텐츠를 푸시하고 종료 시 변경되지 않은 콘텐츠를 팝해야 합니다. 다음 프로토타입이 있는 것처럼 표시되어야 합니다.

void __declspec(naked) __cdecl _penter( void );

이 선언은 64비트 프로젝트에 사용할 수 없습니다.

Visual Studio 개발 환경에서 이 컴파일러 옵션을 설정하려면

  1. 프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 Visual Studio에서 C++ 컴파일러 및 빌드 속성 설정을 참조하세요.

  2. 구성 속성>C/C++>명령줄 속성 페이지를 선택합니다.

  3. 추가 옵션 상자에 컴파일러 옵션을 입력합니다.

프로그래밍 방식으로 이 컴파일러 옵션을 설정하려면

예시

다음 코드는 /Gh를 사용하여 컴파일할 때 함수를 입력할 때 한 번, 함수 xmain 를 입력할 때 한 번, 두 번 호출되는 방법을 _penter보여줍니다. 이 예제는 별도로 컴파일하는 두 개의 소스 파일로 구성됩니다.

원본 파일 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 함수는 다음과 같은 mainx항목에 대해 호출됩니다.

In a function!
In a function!

참고 항목

MSVC 컴파일러 옵션
MSVC 컴파일러 명령줄 구문
/GH (_pexit 후크 함수 사용)