比方说,例如,我使用一些汇编代码将大量数据推送到堆栈上。我的问题是,是否可以通过将栈指针的地址传递给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. 哪些JVM语言是无堆栈的?
- 5. 编译基于堆栈的语言CIL
- 6. 数组和堆栈之间的区别?
- 7. 基于堆栈语言的高级语言
- 8. 堆栈和C语言编程
- 9. 计算机堆栈和Assemly语言
- 10. 如何以LISP语言实现堆栈
- 11. 栈和堆在编程语言
- 12. 使堆栈视图之间的间隔
- 13. 描述堆栈和列表堆栈之间的区别?
- 14. 堆栈间隔的数据结构
- 15. 在查看堆栈中的页面之间发送数据
- 16. 除了堆栈之外,还有哪些编程语言在继续恢复堆?
- 17. 3堆整数之间的堆栈排序
- 18. 通过堆栈的汇编语言putch函数
- 19. 堆栈之间的Java移动号码
- 20. 数据何时在SSE寄存器和堆栈之间移动?
- 21. 进程虚拟内存 - 堆栈和堆之间的空间
- 22. 堆栈及缓冲区溢出数组c语言
- 23. 以汇编语言将数组复制到堆栈帧
- 24. 序言集,堆栈溢出
- 25. 线程之间同步堆栈
- 26. 在CloudFormation堆栈之间引用资源
- 27. 从堆栈中间展开堆栈
- 28. 字符堆栈,字符串堆栈,整数堆栈,整数数组堆栈等
- 29. 堆中的对象与堆栈内存之间的混淆
- 30. 在Python中的数据类型之间的内存语言
我会说不要使用堆栈来进行“通信”。使用通常的参数传递/内存。 – 2010-11-01 17:27:31