繁体   English   中英

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

[英]Do I need to initialize stack in GAS?

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

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

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

  • 没有 VM(例如 DOS、µClinux:MMU):您为堆栈保留了一些物理空间。 In DOS it depends on the memory model you use, for larger memory models you will allocate some memory and point SS (the stack segment) to it. 在 µClinux 中,您将在可执行文件格式的 header 的字段中保存堆栈大小,请参见bFLT格式的示例。
  • VM → 堆栈动态增长,达到可配置的限制(参见 Linux 上的ulimit -s )。 由于每个进程都有自己的虚拟地址空间,因此堆栈与任何其他映射的虚拟 memory 区域之间存在大量空间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM