我需要在GAS中初始化堆栈吗?

问题描述

| 哈o!目前,我正在学习汇编的基础知识。之前我使用过TASM和Intel语法。在那里,我不得不以某种方式初始化堆栈。 但是现在我正在使用GNU汇编器和AT&T语法。我浏览了很多示例,没有看到任何声明/初始化堆栈。我想知道是否必须这样做?或者,可能是在没有我的帮助的情况下制作的?如果是这样,它将如何自动准确初始化?在数据段中摩擦重要信息是否存在风险?我也没有注意到有关堆栈的任何指令。 预先感谢您的回答! 哦,还有一件事:关于类Unix系统,有没有关于ASM(GAS)编程的好书?     

解决方法

        具有虚拟内存的OS处理堆栈的方式与不具有虚拟内存的OS处理堆栈的方式有所不同。 没有虚拟机(例如DOS,µClinux!MMU):您为堆栈保留了一些物理空间。在DOS中,它取决于您使用的内存模型,对于较大的内存模型,您将分配一些内存并将SS(堆栈段)指向该内存。在µClinux中,您将堆栈大小保存在可执行文件格式的标头的字段中,有关示例,请参见bFLT格式。 VM→堆栈动态增长,直至达到可配置的限制(在Linux上请参阅
ulimit -s
)。由于每个进程都有其自己的虚拟地址空间,因此在堆栈和任何其他映射的虚拟内存区域之间有很多空间。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...