堆叠语言之间的数据

时间:2010-11-01 17:24:50

标签: c++ assembly types stack

让我们举例说,我使用一些汇编代码将大量数据压入堆栈。我的问题是,是否可以通过将堆栈指针的地址传递给c ++程序(或其他方式)来使用c ++等语言来操作这些数据?如果是这样,c ++将如何处理这些数据?意思是,我如何确定c ++中的数据类型?

2 个答案:

答案 0 :(得分:4)

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

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

当然,您可以提供允许被调用者计算数据类型的额外信息。例如,printf的第一个参数是(指向)格式字符串,并通过解析格式字符串,被调用者知道该特定调用的剩余参数的类型,然后可以使用varargs宏。

答案 1 :(得分:2)

我相信所有人都需要在同一个过程中运行。但是你不能只在c ++中输入一个结构来确定数据类型,并在你堆放的信息上附加一个标题,说明数据是如何布局的。