我正在对一个旧的C++代码进行逆向工程,我发现了一些我不能理解的东西,它是如何从正常的C++代码中实现的。来自DLL的函数签名是一个损坏的名称,可以恢复为public: void __thiscall MyClass::MyClass(int)。
在MS文档中,对于非静态方法,__thiscall函数具有使用ECX寄存器传递的this成员。嗯,这个特殊的use函数正确地使用了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)你知道这样的事情是如何实现的吗?
发布于 2018-11-22 18:46:44
我找到了答案。当函数或方法返回非基本类型时,内存分配是在调用方进行的,而函数(或方法)只是接收指针。
例如
ClassB __thiscall functionName(param1)将被编译为
ClassB var1;
ClassB * __thiscall functionName(&var1, param1)在程序集级,返回类型地址将最后推入堆栈。如果functionName是类方法,ECX将指向类实例。否则,ECX将被忽略。
https://stackoverflow.com/questions/11488358
复制相似问题