首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有__stdcall行为的__thiscall

具有__stdcall行为的__thiscall
EN

Stack Overflow用户
提问于 2012-07-15 08:06:25
回答 1查看 4.3K关注 0票数 1

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

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

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

代码语言:javascript
复制
void __thiscall MyClass::MyClass(int);  
main() {  
  MyClass *pmc;  
  MyClass *pmc2;  
  pmc = new MyClass(pmc2,0);  
}

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

代码语言:javascript
复制
void __thiscall MyClass:MyClass(MyClass *arg0, int arg1)

你知道这样的事情是如何实现的吗?

EN

回答 1

Stack Overflow用户

发布于 2018-11-22 18:46:44

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

例如

代码语言:javascript
复制
ClassB __thiscall functionName(param1)

将被编译为

代码语言:javascript
复制
ClassB var1;
ClassB * __thiscall functionName(&var1, param1)

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11488358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档