memory - 堆栈帧是如何以及何时构建的?

标签 memory assembly x86 stack-trace low-level

我目前正在阅读有关在 Linux 下利用内存漏洞的信息,我发现很难找到有关何时决定堆栈帧布局的任何信息。换句话说,它是在编译时、程序执行之前确定的,还是在调用函数时构建的?操作系统之间的布局是否不同?

最佳答案

有几个因素。在 x86 上,有一个 calling convention它定义了如何调用函数。我假设其他架构也有类似的东西。系统库(例如 glibc)可以定义额外的约定。但最终编译器决定了它如何使用堆栈——至少当它不需要连接外部库并且需要遵循它们的堆栈布局时。

关于memory - 堆栈帧是如何以及何时构建的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26451396/

相关文章:

c++ - CUDA 固定内存和合并

ios - Swift - 单独的 View 有共享相同内存的 subview ?

delphi - 如何在64位Delphi XE2中将方法转换为回调过程?

linux - 汇编 - 为什么 strtol 破坏 %rcx 寄存器?

c++ - 嵌入式汇编程序编译错误

assembly - 在gas宏中自动生成xmm寄存器名称?

c - 如果将大文件加载到 C Web 服务器的内存缓冲区中会发生什么

linux - Openfire Java 内存

c - mov后正确读取gdb值

assembly - Intel x86汇编手册中的00+是什么意思?