Ассемблер: рассматриваем каждый байт «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/
👉 @Bookflow
Post #3984
1.71K

- 👍 5