• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 787
  • Last Modified:

__penter and /Gh on VC++ 6.0

I'm wondering if anyone has had any experience with the function hook system on VC++ that uses the /Gh compiler option to bung __penter calls at the beginning of each native function in an application. I'm having real trouble getting it to work.

Anyone out there that could give me a hand (and possibly a working example!) would be most appreciated..

-hd
0
Ishani
Asked:
Ishani
  • 3
  • 2
1 Solution
 
nietodCommented:
You should be able to do something like.

void cdecl _penter(void)
{
   __asm
   {
      PUSHA ; Save all the general purpose registers.

     ; your code here.

      POPA   ; Restore all the general purpose registers.
   }
}

What is it that you want to do?  What sort of problems are you having?
0
 
IshaniAuthor Commented:
i'm not getting the linker to recognize the declaration of penter at all.

it complains of an unresolved external symbol, no matter how I declare penter or even if I write it in an external library and link it in (as the MS CAP example does)

0
 
nietodCommented:
The problem may be name decoration.  Try declarinig it as extern "C" like

extern "C" void cdecl _penter(void) ....
0
 
IshaniAuthor Commented:
spot on. although i'm still a bit puzzled:

why _penter and not __penter? even the MSDN docs show a sample implimentation as

void __cdecl __penter(void)...


what does declaring it as a C style name actually do? has this got something to do with name scambling?


thanks muchly for your help.

-hd
0
 
nietodCommented:
the C compiler will add a "_" to the start of the name as part of its name decoration.  So while the linker looks for a function with two "_"'s you only specify one.

>> what does declaring it as a C style name actually do
It removes the C++ name decoration used for overloading.  this is a "code" that is appended to the end of the function name to express the parameters passed to the function.  This code is used to insure that different overloads of a particular function have unique names.
0

Featured Post

Prep for the ITIL® Foundation Certification Exam

December’s Course of the Month is now available! Enroll to learn ITIL® Foundation best practices for delivering IT services effectively and efficiently.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now