gpt4 book ai didi

c++ - __thiscall 与 __stdcall 行为

转载 作者:太空宇宙 更新时间:2023-11-04 12:07:20 25 4
gpt4 key购买 nike

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

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

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

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

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

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

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

最佳答案

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

例如

ClassB __thiscall functionName(param1)

将被编译为

ClassB var1;
ClassB * __thiscall functionName(&var1, param1)

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

关于c++ - __thiscall 与 __stdcall 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11488358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com