Ассемблер: рассматриваем каждый байт «Hello, World!
Что на самом деле происходит, когда вы запускаете программу? Мы привыкли воспринимать это как данность, но за кадром скрывается целая вселенная — от регистров процессора и системных вызовов Linux до формата ELF и модели памяти процесса. Присоединяйтесь к погружению, где мы прольём свет на каждый байт программы «Hello, World!» и поймём, каким образом ОС её выполняет.
❯ Введение: что будет в статье?
На самом деле, целью статьи является не столько просто написать «Hello, World!» на языке ассемблера, сколько разобрать вещи, которые многие воспринимают как данность, хотя имеют с ними дело каждый миг использования компьютера.
Но прежде чем перейти к написанию «Hello, World!», нужно разобрать некоторые концепции, которые помогут нам в полной мере понять происходящее за сценой. Для понимания изложенного ниже нужно хотя бы знать о существовании Linux и понимать, что делает программа «Hello, World!». Думаю, кем бы вы ни были, но раз вы на Хабре, то с этими проблем не будет :)
Мы разберём множество вещей, которые прямо или косвенно касаются программы с приветствием мира на языке ассемблера и к концу статьи будем досконально понимать каждую инструкцию в коде.
Мы разберёмся:
1️⃣ Что такое регистры процессора и как их использовать;
2️⃣ Как происходит процесс компиляции программ;
3️⃣ Узнаем что такое системные вызовы и зачем они нужны;
4️⃣ Какой формат имеют исполняемые файлы в Linux и каких типов они бывают;
5️⃣ Узнаем что такое виртуальное адресное пространство процесса и что в нём хранится;
6️⃣ Поймём процесс линковки (компоновки) программ;
7️⃣ Сделаем собственную библиотеку и поймём разницу между статическими и динамическими библиотеками;
8️⃣ Наконец, с полным пониманием происходящего напишем «Hello, World!» на языке ассемблера.
И начнём мы, как ни странно, с «Hello, World!» на языке C, но прежде проговорим основные вещи.
https://habr.com/ru/companies/timeweb/articles/940310/
♻️ Сделай репост, чтобы помочь другим.
👉 @itmozg