gpt4 book ai didi

c++ - 语言之间的堆栈数据

转载 作者:行者123 更新时间:2023-11-30 00:59:37 26 4
gpt4 key购买 nike

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

最佳答案

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

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

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

关于c++ - 语言之间的堆栈数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4071356/

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