【发布时间】:2012-09-15 12:29:41
【问题描述】:
如果我运行一个程序,就像
#include <stdio.h>
int main(int argc, char *argv[], char *env[]) {
printf("My references are at %p, %p, %p\n", &argc, &argv, &env);
}
我们可以看到这些区域实际上在堆栈中。 但还有什么?如果我们循环遍历 Linux 3.5.3 中的所有值(例如,直到 segfault),我们可以看到一些奇怪的数字,以及由一堆零分隔的两个区域,可能是为了防止覆盖环境变量不小心。
无论如何,在第一个区域中肯定有很多数字,例如每个函数调用的所有帧。
我们如何区分每一帧的结束,参数在哪里,如果编译器添加了金丝雀,返回地址,CPU状态等等?
【问题讨论】:
-
我们可以在这里保留 cmets 的主题吗?谢谢。