比方说,例如,我使用一些汇编代码将大量数据推送到堆栈上。我的问题是,是否可以通过将栈指针的地址传递给C++程序(或其他方式)来操作这些数据,如C++?如果是这样,C++将如何处理这些数据?意思是,我将如何确定C++中的数据类型?语言之间的堆栈数据
1
A
回答
4
是的,你可以做到这一点,当然你必须正确使用调用约定,以便数据清楚地表明C++代码使用堆栈的任何区域。堆栈内存只是内存,就接收这个指针的代码而言,将一些值推入堆栈或移动堆栈指针(即在堆栈上创建一个数组/结构)并写入值进入你创建的空间,或者只是动态地分配一些内存并将值放入。你的汇编程序推送指令将值放在某个特定的布局中。
您无法确定数据类型。例如,在x86上,两个并排的32位int
值与完全相同,为64位long long
值。这就是为什么调用约定会指定堆栈中参数的布局,并要求调用者和被调用者都知道(并同意)参数的顺序和类型。
当然,您可以提供额外的信息,它允许被调用者计算出数据类型。例如,printf
的第一个参数是指向格式字符串的指针,通过解析格式字符串,被调用者知道这个特定调用的剩余参数的类型,然后可以使用可变参数宏读取它们。
2
我相信它都需要在同一个过程中运行。但是,难道你不能只是在C++中键入一个结构来确定数据类型,并且将一个头添加到你放入堆栈的信息中,以指示数据的布局方式。
+0
是的,而且如果我要通过堆栈传递这些数据,很可能会有一种正式格式需要推送,并且C++程序会以此格式读取它。 – 2010-11-01 17:48:52
相关问题
- 1. 堆栈语言的识别
- 2. 汇编语言 - 堆栈机
- 3. 数组和堆栈之间的区别?
- 4. 正式语言的堆栈翻译器
- 5. 编译基于堆栈的语言CIL
- 6. 如何以LISP语言实现堆栈
- 7. 在查看堆栈中的页面之间发送数据
- 8. 除了堆栈之外,还有哪些编程语言在继续恢复堆?
- 9. 堆栈之间的Java移动号码
- 10. 通过堆栈的汇编语言putch函数
- 11. 进程虚拟内存 - 堆栈和堆之间的空间
- 12. 线程之间同步堆栈
- 13. 序言集,堆栈溢出
- 14. 字符堆栈,字符串堆栈,整数堆栈,整数数组堆栈等
- 15. 堆中的对象与堆栈内存之间的混淆
- 16. .NET EXE和DLL之间的堆栈/堆区别
- 17. std :: vector堆栈帧之间的C++参数的值变化
- 18. 在不同的语言环境中的Java堆栈跟踪
- 19. 用各种语言编写的程序之间交换数据
- 20. 数据结构:堆栈
- 21. 析构函数调用(堆栈)变量之间的赋值?
- 22. 性能和调用堆栈层数之间的关系?
- 23. 本地语言中的堆栈溢出行为
- 24. 自定义JVM语言:创建可用的堆栈跟踪?
- 25. 堆VS数据段VS堆栈分配
- 26. Django的多语言和模板端语言之间的切换
- 27. 堆栈和堆之间有什么区别?
- 28. django-多语言和模板端语言之间的切换
- 29. 在Bootstrap 4中添加垂直堆栈列之间的间距
- 30. 如何控制ggplot2中堆栈栏之间的空间?
我会说不要使用堆栈来进行“通信”。使用通常的参数传递/内存。 – 2010-11-01 17:27:31