在我的 vtable 中,我找到了一个只返回 ecx 的方法。现在我对这试图完成什么感到困惑?这是一个已知的有用序列吗?
返回 <this> 的虚拟方法?
逆向工程
艾达
C++
2021-06-12 03:48:06
3个回答
Visual Studio 的 C++ 编译器将指针ecx用作默认寄存器this,这是一个返回ecx然后实际返回thisor的虚拟方法*this。例如,您可以测试以下代码:
class A
{
public:
virtual A getmyself() { return *this; }
virtual A* getmyselfpointer() { return this; }
}
为getmyself(相同的getmyselfpointer)生成的汇编代码是
getmyself:
mov eax, ecx
retn
此详细信息不适用于clang或gcc因为它们不用ecx作this.
它可能是一种在高层旨在返回协变对象指针的方法。
如果是 ARM,我会说它是构造函数或析构函数(有关更多详细信息,请参阅此答案)。作为更通用模式的一部分,我在多平台应用程序中看到了这样的事情,其中函数的主要代码被#ifdef删除,只留下返回值以与其他平台/构建配置兼容。
你看到对这个函数的调用了吗?
其它你可能感兴趣的问题