__此调用具有__stdcall行为
__thiscall with __stdcall behaviour
我正在对一个旧的C++代码进行逆向工程,我发现了一些我无法理解如何从普通C++代码中实现的东西。DLL中的函数签名是一个损坏的名称,可以恢复为public: void __thiscall MyClass::MyClass(int)
。
在MS文档中,对于非静态方法,__thiscall
函数具有使用ECX寄存器传递的this
成员。这个特殊函数正确地使用了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)
有什么想法可以完成这样的事情吗?
例如
ClassB __thiscall functionName(param1)
将被编译为
ClassB var1;
ClassB * __thiscall functionName(&var1, param1)
在程序集级别,返回类型地址将最后推入堆栈。如果functionName是一个类方法,ECX将指向该类实例。否则,ECX将被忽略。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- arr[-1]在c++中的奇怪行为
- 继承期间显示未知行为的子类
- 如何在c++中使用引用实现类似python的行为
- G锁定铸造到基础上会释放模拟行为
- 在C++中对T*类型执行std::move的意外行为
- std::当在256字节边界上写入整数时,流的奇怪行为
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 奇怪的构造函数行为
- 重载运算符new[]的行为取决于析构函数
- 不同语言中相同代码的不同行为
- 处理除以零会导致<csignal>意外行为
- 试图理解类对象的行为
- c++11评估顺序(未定义的行为)
- 从结构寻址时,MMAP变量的行为很奇怪
- 我可以做些什么来消除或最小化这种将提供相同功能和行为的代码重复
- 读取文件时运行时的未知行为
- strncpy之后的char数组的错误行为
- 此增量后语句是否会导致未定义的行为?