/Gh(_penter 후크 함수 사용)
모든 메서드 또는 함수가 _penter
시작될 때 함수를 호출합니다.
구문
/Gh
설명
함수는 _penter
라이브러리의 일부가 아닙니다. 에 대한 정의를 제공하는 것은 사용자에게 달려 있습니다 _penter
.
명시적으로 호출 _penter
하지 않는 한 프로토타입을 제공할 필요가 없습니다. 함수는 항목에서 모든 레지스터의 콘텐츠를 푸시하고 종료 시 변경되지 않은 콘텐츠를 팝해야 합니다. 다음 프로토타입이 있는 것처럼 표시되어야 합니다.
void __declspec(naked) __cdecl _penter( void );
이 선언은 64비트 프로젝트에 사용할 수 없습니다.
Visual Studio 개발 환경에서 이 컴파일러 옵션을 설정하려면
프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 Visual Studio에서 C++ 컴파일러 및 빌드 속성 설정을 참조하세요.
구성 속성>C/C++>명령줄 속성 페이지를 선택합니다.
추가 옵션 상자에 컴파일러 옵션을 입력합니다.
프로그래밍 방식으로 이 컴파일러 옵션을 설정하려면
- AdditionalOptions을(를) 참조하세요.
예시
다음 코드는 /Gh를 사용하여 컴파일할 때 함수를 입력할 때 한 번, 함수 x
main
를 입력할 때 한 번, 두 번 호출되는 방법을 _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
함수는 다음과 같은 main
x
항목에 대해 호출됩니다.
In a function!
In a function!