Was ist in dem Stapel?

Wenn ich ein Programm laufen lasse, genauso wie

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

Wir können sehen, dass sich diese Regionen tatsächlich im Stapel befinden. Aber was gibt es noch? Wenn wir eine Schleife durch alle Werte in Linux 3.5.3 laufen lassen (zum Beispiel bis zum Segfault), sehen wir einige seltsame Zahlen und zwei Regionen, die durch eine Reihe von Nullen getrennt sind, möglicherweise um zu verhindern, dass die Umgebungsvariablen überschrieben werden zufällig.

Wie auch immer, in der ersten Region müssen viele Nummern vorhanden sein, wie z. B. alle Frames für jeden Funktionsaufruf.

Wie können wir das Ende jedes Frames unterscheiden, wo sich die Parameter befinden, wo der Kanarienvogel, wenn der Compiler einen hinzufügt, die Rücksprungadresse, den CPU-Status und so weiter?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage