我正在对一个旧的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)
有什么想法可以实现这样的事情吗?
答案 0 :(得分:0)
我找到了答案。 当函数或方法返回非基本类型时,将在调用方进行内存分配,而函数(或方法)仅接收指针。
例如
*pom.xml merge=recursive
将被编译为
[merge "recursive"]
driver = true
在程序集级别,返回类型地址将最后被压入堆栈。如果functionName是类方法,则ECX将指向该类实例。否则,ECX将被忽略。