我目前正在阅读有关在 Linux 下利用内存漏洞的信息,我发现很难找到有关何时决定堆栈帧布局的任何信息。换句话说,它是在编译时、程序执行之前确定的,还是在调用函数时构建的?操作系统之间的布局是否不同?
最佳答案
有几个因素。在 x86 上,有一个 calling convention它定义了如何调用函数。我假设其他架构也有类似的东西。系统库(例如 glibc)可以定义额外的约定。但最终编译器决定了它如何使用堆栈——至少当它不需要连接外部库并且需要遵循它们的堆栈布局时。
关于memory - 堆栈帧是如何以及何时构建的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26451396/