调用指令 - 引用中的 ?@_ 之前?

逆向工程 艾达 拆卸 部件 称呼
2021-07-05 10:08:03

似乎是一个无关紧要的问题,但我只是好奇:在这些不同的指令中,前面的(单/双)?-marks、@-signs 或__下划线是否有更深层次的含义call

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个回答

前导?标识 C++ 名称重整符号。两个??表示运算符、构造函数、析构函数、常量字符串和各种编译器生成器函数。例如??0是一个构造函数。该站点对 MSVC 使用的重整件进行了很好的细分。

前导下划线_可能是由于调用约定或由于 CRT/编译器标识标准。他们将用两个前导下划线 __作为所有符号的前缀,以帮助防止名称冲突:

在 Microsoft C++ 中,带有两个前导下划线的标识符是为编译器实现保留的。

这些是所谓的“错位”或“装饰”名称。您可以使用 Visual Stduio 中的 undname 实用程序来对它们进行解码:

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

欲了解更多信息:维基百科MSDN