O que há dentro da pilha?

Se eu executo um programa, como

#include <stdio.h>
int main(int argc, char *argv[], char *env[]) {
  printf("My references are at %p, %p, %p\n", &argc, &argv, &env);
}

Podemos ver que essas regiões estão realmente na pilha. Mas o que mais tem lá? Se executássemos um loop através de todos os valores no Linux 3.5.3 (por exemplo, até segfault), poderíamos ver alguns números estranhos e duas regiões, separadas por um monte de zeros, talvez para tentar evitar sobrescrever as variáveis ​​de ambiente. acidentalmente.

De qualquer forma, na primeira região deve haver muitos números, como todos os quadros para cada chamada de função.

Como poderíamos distinguir o final de cada frame, onde os parâmetros são, onde o canary se o compilador adicionou um, endereço de retorno, status da CPU e tal?

questionAnswers(4)

yourAnswerToTheQuestion