/Gh(启用 _penter 挂钩函数)
导致在每个方法或函数的开头调用 _penter 函数。
/Gh
备注
_penter 函数不是任何库的组成部分,由您负责提供 _penter 的定义。
除非打算显式调用 _penter,否则不需要提供原型。该函数必须看起来似乎具有下列原型,并且必须在进入时推送所有寄存器的内容,在退出时弹出未更改的内容:
void __declspec(naked) _cdecl _penter( void );
此声明不适用于 64 位项目。
在 Visual Studio 开发环境中设置此编译器选项
打开项目的**“属性页”**对话框。有关详细信息,请参见如何:打开项目属性页。
单击**“C/C++”**文件夹。
单击**“命令行”**属性页。
在**“附加选项”**框中键入编译器选项。
以编程方式设置此编译器选项
- 请参见 AdditionalOptions。
示例
当用 /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
}
}