다음을 통해 공유


/Gh(_penter 후크 함수 사용)

모든 메서드나 함수를 시작할 때 _penter 함수가 호출됩니다.

/Gh

설명

_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
    }
}
      

참고 항목

참조

컴파일러 옵션

컴파일러 옵션 설정