共用方式為


/Gh (啟用 _penter 攔截函式)

會在每個方法或函式的開頭呼叫 _penter 函式。

語法

/Gh

備註

_penter 式不屬於任何程式庫。 您必須提供 的定義 _penter

除非您打算明確呼叫 _penter ,否則您不需要提供原型。 函式必須在專案上推送所有暫存器的內容,並在結束時彈出未變更的內容。 它必須看起來像它有下列原型:

void __declspec(naked) __cdecl _penter( void );

此宣告不適用於 64 位專案。

在 Visual Studio 開發環境中設定這個編譯器選項

  1. 開啟專案的 [屬性頁] 對話方塊。 如需詳細資料,請參閱在 Visual Studio 中設定 C ++ 編譯器和組建屬性

  2. 選取 [組態屬性]>[C/C++]>[命令列] 屬性頁。

  3. 在 [ 其他選項 ] 方塊中輸入編譯器選項。

若要以程式方式設定這個編譯器選項

範例

下列程式碼使用 /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!

另請參閱

MSVC 編譯器選項
MSVC 編譯器命令列語法
/GH (啟用_pexit勾點函式)