/Gh (povolení funkce hooku _penter)
Způsobí volání _penter
funkce na začátku každé metody nebo funkce.
Syntaxe
/Gh
Poznámky
Funkce _penter
není součástí žádné knihovny. Je na vás, abyste zadali definici ._penter
Pokud nemáte v úmyslu explicitně volat _penter
, nemusíte poskytovat prototyp. Funkce musí nasdílit obsah všech registrů na vstupu a při ukončení zobrazit nezměněný obsah. Musí se zdát, jako by měl následující prototyp:
void __declspec(naked) __cdecl _penter( void );
Tato deklarace není k dispozici pro 64bitové projekty.
Nastavení tohoto parametru kompilátoru ve vývojovém prostředí Visual Studio
Otevřete dialogové okno Stránky vlastností projektu. Podrobnosti najdete v tématu Nastavení kompilátoru C++ a vlastností sestavení v sadě Visual Studio.
Vyberte stránku vlastností příkazového řádku C/C++>Vlastnosti>konfigurace.
Do pole Další možnosti zadejte možnost kompilátoru.
Programové nastavení tohoto parametru kompilátoru
- Viz třída AdditionalOptions.
Příklad
Následující kód při kompilaci pomocí /Gh ukazuje, jak _penter
se volá dvakrát; jednou při zadávání funkce main
a jednou při zadávání funkce x
. Příklad se skládá ze dvou zdrojových souborů, které kompilujete samostatně.
Zdrojový soubor 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
}
}
Zdrojový soubor 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();
}
Při spuštění je místní _penter
funkce volána při zadávání a main
x
:
In a function!
In a function!
Viz také
Možnosti kompilátoru MSVC
Syntaxe příkazového řádku kompilátoru MSVC
/GH
(Povolení funkce háku _pexit)