Что внутри стека?

Если я запускаю программу, так же, как

#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), мы увидим несколько странных чисел и две области, разделенные кучкой нулей, возможно, чтобы предотвратить перезапись переменных среды случайно.

В любом случае, в первом регионе должно быть много чисел, например, все кадры для каждого вызова функции.

Как мы можем различить конец каждого кадра, где параметры, где канарейка, если компилятор добавил один, адрес возврата, состояние процессора и тому подобное?

Ответы на вопрос(4)

Ваш ответ на вопрос