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?