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

时间:2011-05-29 09:30:19

标签: unix assembly stack gas

喂!目前我正在学习装配的基础知识。早些时候我使用的是TASM和Intel语法。我必须在某些方面初始化堆栈。 但现在我正在使用GNU Assembler和AT& T语法。我查看了很多示例,没有看到堆栈的任何声明/初始化。我想知道我是否必须这样做?或者,可能是,这是在没有我帮助的情况下制作的?如果是这样,它究竟是如何自动初始化的?在数据段中存在重要信息的风险吗?我没有注意到有关堆栈的任何指令。

事先感谢您的回答! 哦,还有一件事:是否有关于类Unix系统的ASM(GAS)编程的好书?

1 个答案:

答案 0 :(得分:0)

具有虚拟内存的操作系统处理堆栈的方式与没有虚拟内存的操作系统处理方式有所不同。

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