__thiscall与__stdcall行为

时间:2012-07-15 00:06:25

标签: c++ calling-convention

我正在对一个旧的C ++代码进行逆向工程,我找到了一些我无法理解的东西,它是如何从普通的C ++代码中实现的。来自DLL的函数签名是一个受损的名称,可以恢复到public: void __thiscall MyClass::MyClass(int)

在MS文档中,__thiscall函数具有this成员,对于非静态方法,使用ECX寄存器传递。好吧,这个particulcar函数正确使用ECX寄存器传递,但是,从反汇编代码中,第一个参数不是int参数,而是指向对象的指针。

这是我从DLL公共名称中可以看到的:

void __thiscall MyClass::MyClass(int);  
main() {  
  MyClass *pmc;  
  MyClass *pmc2;  
  pmc = new MyClass(pmc2,0);  
}

因此,在这种情况下,构造函数(以及其他方法)似乎定义为:

void __thiscall MyClass:MyClass(MyClass *arg0, int arg1)

有什么想法可以实现这样的事情吗?

1 个答案:

答案 0 :(得分:0)

我找到了答案。 当函数或方法返回非基本类型时,将在调用方进行内存分配,而函数(或方法)仅接收指针。

例如

*pom.xml merge=recursive

将被编译为

[merge "recursive"]
  driver = true

在程序集级别,返回类型地址将最后被压入堆栈。如果functionName是类方法,则ECX将指向该类实例。否则,ECX将被忽略。