Как программа попадает в память: от execve до main
Средний
13 мин
Туториал

Вы когда-нибудь задумывались, что происходит после того, как вы нажимаете Enter в терминале Linux? Вводите ./myprogram и...
Что именно происходит дальше? Как ядро находит файл? Как загружает его в память? Кто вызывает main? И как на всё это посмотреть вживую?
Разберемся на примере пустой программы empty_sleep. Она ничего не делает, просто запускается и завершается через 30 секунд. В ней нет лишнего кода и мы сможем сосредоточиться только на процессе загрузки. Всё, что мы увидим, относится к большинству динамически скомпилированных программ в Linux.
В этой статье покажу как с помощью strace в реальном времени проследить путь программы от execve до _start и main.