我已经玩了一段时间的汇编和操作系统开发(在真实模式和保护模式下),并且由于我在内核模式下工作("Ring 0"又名"Full Privileges"),我总是不得不担心在使用堆栈指令(push/pop)之前设置堆栈。
现在我一直在查看用户模式的 32 位汇编程序(适用于 Windows 和 linux),并注意到我看到的所有程序示例都只是使用堆栈指令,而无需先设置堆栈。这是什么意思?操作系统是否在启动所述进程之前设置进程堆栈本身?
提前感谢,
若昂·席尔瓦。
你自己已经给出了答案:
为代码、全局数据(堆)和本地数据(堆栈)提供所有必要的内存是系统职责的一部分。
[更新:这不应该被忽视:一旦进入权限较低的环,就像任何用户空间应用程序通常一样,这个非常用户空间的应用程序不容易设置堆栈。它必须进行系统调用才能分配它。但是由于大约 99.999% 的应用程序都需要堆栈,因此首先为所有用户空间应用程序提供一个堆栈同样经济,而无需强迫开发人员在每个程序中请求它。/更新]