返回 <this> 的虚拟方法?

逆向工程 艾达 C++
2021-06-12 03:48:06

在我的 vtable 中,我找到了一个只返回 ecx 的方法。现在我对这试图完成什么感到困惑?这是一个已知的有用序列吗?

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

此详细信息不适用于clanggcc因为它们不用ecxthis.

它可能是一种在高层旨在返回协变对象指针的方法。

如果是 ARM,我会说它是构造函数或析构函数(有关更多详细信息,请参阅此答案)。作为更通用模式的一部分,我在多平台应用程序中看到了这样的事情,其中​​函数的主要代码被#ifdef删除,只留下返回值以与其他平台/构建配置兼容。

你看到对这个函数的调用了吗?