0

Seems to be a question of no importance, but I'm just curious: Is there a deeper meaning of the preceeding (single/double) ?-marks, @-signs or __ underscores in these different call instructions?

call ??2@YAPAXI@Z
call ??0CAdviseObject@CBLObject@@QAE@PAUIDispatch@@PAVCBLInstance@@@Z
call ?StartAutoReconnect@CBLObject@@IAEXIH@Z
call @__security_check_cookie@4
call __SEH_epilog

2 Answers 2

3

The leading ? identifies a C++ name mangled symbol. Two ?? signify operators, constructors, destructors, constant strings, and various compiler generator functions. For example ??0 is a constructor. This site has a good breakdown of the mangling pieces used by MSVC.

A leading underscore _ can either be due to the calling convention or due to the CRT/compiler identification standard. They will prefix all of their symbols with two leading underscores __ as a way to help prevent name collisions:

In Microsoft C++, identifiers with two leading underscores are reserved for compiler implementations.

2

These are so-called "mangled" or "decorated" names. You can use undname utility from Visual Stduio to demangle them:

void * __cdecl operator new(unsigned int)
public: __thiscall CBLObject::CAdviseObject::CAdviseObject(struct IDispatch *,cl
ass CBLInstance *)
protected: void __thiscall CBLObject::StartAutoReconnect(unsigned int,int)

For more info: Wikipedia, MSDN.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.