在x86(32位)程序集中实例化c ++类(通过复制将c ++类传递给程序集中的方法)

Jul*_*.M. 2 c++ x86 assembly multiple-languages

在我的项目中,除了许多其他方面,我还有从程序集调用c ++方法并通过副本传递类.如果我可以通过引用传递它会很简单,但我不能.

我假设它看起来像这样:创建一个新类的实例; 将类的属性复制到新类的属性; 将指向新类的指针推入堆栈; 打电话给方法; 调用类的析构函数,它是另一个类的副本.

所以真正的问题是,如何实例化在汇编中用c ++创建的类?

非常感谢大家.

编辑:我正在使用Fedora 14驱动的x86个人计算机上的gcc.

Xeo*_*Xeo 5

创建类对象与创建普通堆栈变量没有太大区别.你只需要调用(copy-)构造函数.
您在堆栈上为本地类对象创建空间,推送对象以从堆栈上创建副本(作为复制ctor的参数),传递本地空间的地址1)并最终调用复制构造函数你想要创建的课程.
然后将该本地对象推入堆栈并调用您的函数.然后再次传递本地对象的地址1)并调用析构函数.
如何准确编码取决于您的平台/架构.

1)ecx寄存器被用于传递this关于MSVC指针.GCC this作为隐藏的第一个参数传递.差异总结在这里.只知道x86架构,而不是其他人,对不起.