Co jest w środku stosu?

Jeśli uruchomię program, tak jak

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

Widzimy, że te regiony są w rzeczywistości na stosie. Ale co jeszcze tam jest? Jeśli uruchomiliśmy pętlę przez wszystkie wartości w Linuksie 3.5.3 (na przykład, aż do segfault), możemy zobaczyć dziwne liczby i rodzaj dwóch regionów, oddzielonych wiązką zer, być może w celu zapobieżenia nadpisaniu zmiennych środowiskowych przypadkowo.

W każdym razie w pierwszym regionie musi być wiele liczb, takich jak wszystkie ramki dla każdego wywołania funkcji.

Jak można odróżnić koniec każdej ramki, gdzie są parametry, gdzie kanarek, jeśli kompilator dodał jeden, adres zwrotny, status procesora i takie?

questionAnswers(4)

yourAnswerToTheQuestion