от
Я пытаюсь понять, как работает стек в Linux. Я прочитал разделы AMD64 ABI об инициализации стека и процесса, и неясно, как должен отображаться стек. Вот соответствующая цитата (3.4.1):   Stack State      В этом разделе описывается состояние компьютера, которое
exec
(BA_OS) создает для   новые процессы. а также   Не определено, являются ли данные и сегменты стека изначально   сопоставлены с разрешениями на выполнение или нет. Приложения, которые необходимо   выполнить код в стеке или сегменты данных должны занять надлежащее   меры предосторожности, например, по телефону
mprotect()
. Таким образом, я могу вывести из приведенных выше цитат, что стек отображается (это не определено, если
PROT_EXEC
используется для создания отображения). Также отображение создается
exec
. Вопрос в том, использует ли стек «основного потока» отображение
MAP_GROWSDOWN | MAP_STACK
или, может быть, даже через
sbrk
? Глядя на
pmap , стек помечается [stack]
как
00007ffc04c78000     132      12      12 rw

Создание отображения как

mmap(NULL, 4096,
     PROT_READ | PROT_WRITE,
     MAP_ANONYMOUS | MAP_PRIVATE | MAP_STACK,
     

просто создает анонимное отображение, как показано в pmap  как

00007fb6e42fa000       4       0       0 rw
    

        

Пожалуйста, войдите или зарегистрируйтесь для публикации ответа на этот вопрос.

...