/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!
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應