TGViewer
Неопознанный кактус Неопознанный кактус @kvktyc · 33 subscribers
Post #36 33
Экзешники в Unix и причем здесь эльфы

В Unix-подобных системах довольно часто можно встретить аббревиатуру ELF.
Executable and Linkable Format. Это в принципе формат организации исполняемого бинарного файла.

Общая информация (заголовки):
$ readelf -h /bin/ls
Заголовок ELF:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Класс: ELF64
Данные: дополнение до 2, от младшего к старшему
Version: 1 (current)
OS/ABI: UNIX - System V
Версия ABI: 0
Тип: DYN (Position-Independent Executable file)
Машина: Advanced Micro Devices X86-64
Версия: 0x1
Адрес точки входа: 0x54f0
Начало заголовков программы: 64 (байт в файле)
Начало заголовков раздела: 160680 (байт в файле)
Флаги: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 14
Size of section headers: 64 (bytes)
Number of section headers: 28
Section header string table index: 27


Инструкции к памяти:
$ readelf -l /bin/ls

Тип файла ELF — DYN (Position-Independent Executable file)
Entry point 0x54f0
There are 14 program headers, starting at offset 64

Заголовки программы:
Тип Смещ. Вирт.адр Физ.адр
Рзм.фйл Рзм.пм Флаги Выравн
PHDR 0x0000000000000040 0x0000000000000040 0x0000000000000040
0x0000000000000310 0x0000000000000310 R 0x8
INTERP 0x0000000000000374 0x0000000000000374 0x0000000000000374
0x000000000000001c 0x000000000000001c R 0x1
[Запрашиваемый интерпретатор программы: /lib64/ld-linux-x86-64.so.2]
LOAD 0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000002468 0x0000000000002468 R 0x1000
LOAD 0x0000000000003000 0x0000000000003000 0x0000000000003000
...


Секции бинарника
$ readelf -S /bin/ls
There are 28 section headers, starting at offset 0x273a8:

Заголовки разделов:
[Нм] Имя Тип Адрес Смещение
Размер Разм.Ent Флаги Ссылк Инфо Выравн
[ 0] NULL 0000000000000000 00000000
0000000000000000 0000000000000000 0 0 0
[ 1] .note.gnu.bu[...] NOTE 0000000000000350 00000350
0000000000000024 0000000000000000 A 0 0 4
[ 2] .interp PROGBITS 0000000000000374 00000374
000000000000001c 0000000000000000 A 0 0 1
[ 3] .gnu.hash GNU_HASH 0000000000000390 00000390
...


Динамические зависимости:
$ readelf -d /bin/ls | grep NEEDED
0x0000000000000001 (NEEDED) Совм. исп. библиотека: [libcap.so.2]
0x0000000000000001 (NEEDED) Совм. исп. библиотека: [libc.so.6]


Типы ELF-файлов:
- ET_REL (Relocatable): объектный файл (.o)
- ET_EXEC (Executable): обычная программа
- ET_DYN (Shared Object): динамические библиотеки (.so)

В целом это почти то же самое, что EXE в Windows - там используется формат `PE` (Portable Executable), а здесь ELF. Но исторически сложилось так, что EXE это буквально стандарт упаковки программ, а ELF это базовый, но скрытый за динамическими зависимостями компонент.
  • 👍 2
More from @kvktyc
  1. Sep 25, 2026Из интересного. Недавно появилась новость о том, что некий бывший инженер Microsoft восста…
  2. Sep 25, 2026Первая версия UNIX была написана на ассемблере для PDP-7 в 1969. Официально началом эпохи…
  3. Sep 13, 2026Не тот саундтрек сделали к игре, не тот. И аккорды нам расставили не те, но эту песню возм…
  4. Sep 12, 202626 дюймовый монитор, на котором в 1995 Джон Кармак работал над Quake: Intergraph InterView…
  5. Sep 12, 2026С детства за космос Я вырос на этой фантастике, зачитал до дыр все книги Ефремова, Стругац…
  6. Sep 12, 2026Русский космизм У нас есть очень здравое и ценное наследие в культуре восприятия космоса и…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →