【发布时间】:2014-10-19 14:16:01
【问题描述】:
我目前正在阅读有关在 Linux 下利用内存漏洞的信息,我发现很难找到有关何时决定堆栈帧布局的任何信息。换句话说,它是在编译时、程序执行之前确定的,还是在调用函数时构建的?不同操作系统的布局是否不同?
【问题讨论】:
-
-1 表示未显示任何研究工作。谷歌指向wiki.osdev.org/Stack 和en.wikipedia.org/wiki/Call_stack#Structure 和Intel® 64 and IA-32 Architectures Software Developer Manuals 在几个地方解释堆栈框架等。
-
+1 来平衡@xmojmr。这些文件告诉一个人所做的布局选择。 OP 想知道这些选择是如何产生的,这对我来说似乎是一个很合理的问题。
-
@IraBaxter 链接的文档清楚地表明,在汇编语言中(使用的标签 OP)堆栈框架是使用程序员编写的
push指令创建的,并被 1 对 1 编译成机器代码(因此堆栈框架布局不是在“程序执行之前”确定,也不是在“调用函数时”确定,而是在程序员编写push或enter指令时确定)。在我看来,要么 OP 想提出不同的问题,要么没有表现出任何研究工作 -
所以有两个隐含的问题:1)堆栈帧的设计是什么[它们都有什么共同点],2)堆栈帧的细节(例如,偏移量)是什么[通常在特定于正在编译的特定子例程的编译时确定]。他似乎专注于前者,并且似乎理解后者的发生。
标签: memory assembly x86 stack-trace low-level