C++ 在语言之间堆叠数据

C++ 在语言之间堆叠数据,c++,assembly,types,stack,C++,Assembly,Types,Stack,例如,我使用一些汇编代码将大量数据推送到堆栈上。我的问题是,是否可以通过将栈指针的地址传递给C++程序或其他方式来操纵C++等语言中的数据?如果是这样,C++将如何处理这些数据?意义,我如何确定C++中的数据类型?我相信它也需要在同一个过程中运行。但是,你不能只在C++中构造一个结构来确定数据类型,并将一个头附加到堆栈上的信息中,指示数据是如何排列的。使用通常的参数传递/内存。我会说不要使用堆栈进行通信。使用通常的参数传递/内存,是的,而且如果我要通过栈传递这些数据,我可能会有一个正式的格式需要

例如,我使用一些汇编代码将大量数据推送到堆栈上。我的问题是,是否可以通过将栈指针的地址传递给C++程序或其他方式来操纵C++等语言中的数据?如果是这样,C++将如何处理这些数据?意义,我如何确定C++中的数据类型?<是的,你可以这样做,当然,如果你正确地使用调用约定,那么数据就清楚地显示了C++代码用作堆栈的任何区域。堆栈内存就是内存,就接收该指针的代码而言,将某些值推送到堆栈上,或移动堆栈指针(即在堆栈上创建数组/结构,然后将值写入所创建的空间)没有区别,或者只是动态分配一些内存并将值放入。您的汇编器推送指令将值放在某个特定布局中,仅此而已

您无法确定数据类型。例如,在x86上,并列的两个32位int值与64位长的值完全相同。这就是为什么调用约定指定堆栈上参数的布局,并要求调用方和被调用方都知道并同意参数的顺序和类型


当然,您可以提供额外的信息,让被叫方计算出数据类型。例如,printf的第一个参数是指向格式字符串的指针,通过解析格式字符串,被调用方知道此特定调用的其余参数的类型,然后可以使用varargs宏读取它们。

是的,您可以这样做,当然前提是正确使用调用约定,这样数据就清楚地显示了C++代码用作堆栈的任何区域。堆栈内存就是内存,就接收该指针的代码而言,将某些值推送到堆栈上,或移动堆栈指针(即在堆栈上创建数组/结构,然后将值写入所创建的空间)没有区别,或者只是动态分配一些内存并将值放入。您的汇编器推送指令将值放在某个特定布局中,仅此而已

您无法确定数据类型。例如,在x86上,并列的两个32位int值与64位长的值完全相同。这就是为什么调用约定指定堆栈上参数的布局,并要求调用方和被调用方都知道并同意参数的顺序和类型


当然,您可以提供额外的信息,让被叫方计算出数据类型。例如,printf的第一个参数是指向格式字符串的指针,通过解析格式字符串,被调用方知道此特定调用的其余参数的类型,然后可以使用varargs宏读取它们。

我相信它也需要在同一进程中运行。但是,你不能仅仅在C++中构造一个结构来确定数据类型,并将一个头附加到堆栈上的信息中,指示数据是如何排列的。

< P>我相信它也需要在同一个过程中运行。但是,你不能只在C++中构造一个结构来确定数据类型,并将一个头附加到堆栈上的信息中,指示数据是如何排列的。使用通常的参数传递/内存。我会说不要使用堆栈进行通信。使用通常的参数传递/内存,是的,而且如果我要通过栈传递这些数据,我可能会有一个正式的格式需要被推上,C++程序会在这个格式中读取它,是的,并且如果我要通过栈传递这个数据,那么很有可能。我将有一个正式的格式,需要推动,而C++程序将读取它,在这种格式。