/Gh (啟用 _penter 攔截函式)
會在每個方法或函式的開頭呼叫 _penter
函式。
語法
/Gh
備註
函 _penter
式不屬於任何連結庫。 您必須提供的定義 _penter
。
除非您打算明確呼叫 _penter
,否則您不需要提供原型。 函式必須在專案上推送所有緩存器的內容,並在結束時彈出未變更的內容。 它必須看起來像它有下列原型:
void __declspec(naked) __cdecl _penter( void );
此宣告不適用於 64 位專案。
在 Visual Studio 開發環境中設定這個編譯器選項
開啟專案的 [屬性頁] 對話方塊。 如需詳細資料,請參閱在 Visual Studio 中設定 C ++ 編譯器和組建屬性。
選取 [組態屬性]>[C/C++]>[命令列] 屬性頁。
在 [ 其他選項 ] 方塊中輸入編譯程序選項。
若要以程式方式設定這個編譯器選項
- 請參閱 AdditionalOptions。
範例
下列程式代碼使用 /Gh 編譯時,會顯示如何_penter
呼叫兩次;一次輸入函main
式,一次輸入函式x
時。 此範例包含兩個原始程序檔,您可以分開編譯。
來源檔案 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();
}
執行時,會在和 x
的專案main
上呼叫本機_penter
函式:
In a function!
In a function!