TGViewer
.NET Kings .NET Kings @netskings · 7.38K subscribers
Post #581 4.34K
👁‍🗨Hello world~

Компоновщик: Как из кода получается программа

Часть 1: Что делает компоновщик


• Я начинаю новый цикл постов про то, что такое компоновщик и как он работает, если кому интересно, вот откуда я буду брать инфу - *тык*. Приятного чтения.

• Компоновщик (linker) — программа, которая превращает объектные файлы в исполняемые файлы или разделяемые библиотеки.

• Что это значит? При написании программы например на C ил C++, компилятор преобразует исходный код в промежуточный код, часто ассемблер. После чего ассемблер превращает ассемблерный код в объектный файл. (Некоторые компиляторы делают это напрямую)

• Раньше программы писали сразу на ассемблере, и ассемблер сразу генерировал исполняемый файл. Когда появились языки вроде Fortran и Cobol, появилась идея библиотек подпрограмм. Требовалось собирать итоговый файл из нескольких объектных, и это привело к появлению программы-компоновщика. Позже появилась поддержка разделяемых библиотек.

• Немного про разделяемые библиотеки. Разделяемые библиотеки (Shared libraries) — были придуманы как оптимизация для виртуальных ОС с многозадачностью. До разделяемых библиотек каждая программа содержала копию одного и того же кода, даже если базовый код использовался почти в каждой программе. Это привело к идее использовать систему виртуальной памяти, чтобы загружать одну копию и делиться ею между всеми процессами.

• Первая реализация появилась в SVR3 (формат COFF) — она просто выделяла каждому .so определённый участок адресного пространства. Это не требовало серьёзных изменений в компоновщике, но было неудобно.

• SunOS4 предложила более гибкий подход, позже перенятый в SVR4. Компоновка теперь частично происходила во время запуска программы. При старте исполнялся динамический компоновщик, связывающий программу с разделяемыми библиотеками. Прежний компоновщик стал называться статическим или программным. Статический компоновщик теперь должен был готовить информацию для динамического.

• Теперь вы знаете, что делает компоновщик, далее узнаем как именно он это делает. Удачи!

• Поддержать автора монеткой: @v_meshke
  • ❤ 24
  • 👍 7
  • 👾 3
  • 🙏 1
More from @netskings
  1. Oct 6, 2026👁‍🗨Hello world~ Разбор ELF: Формат объектных файлов под микроскопом Секции • В первом по…
  2. Oct 5, 2026Освой сети и командную строку с лучшими обучающими каналами 🤩 Network Admin - обучающий к…
  3. Oct 5, 2026👁‍🗨Hello world~ Компилятор: Путь от исходника до исполняемого файла. Обзор и практика на…
  4. Oct 4, 2026👁‍🗨Hello world~ Когда проблема не в коде, а в замысле. OWASP A06: Insecure Design • Inse…
  5. Oct 3, 2026👁‍🗨Hello world~ Изучаем сеть: Как коммутатор запоминает устройства • Коммутатор передаёт…
  6. Oct 2, 2026👁‍🗨Hello world~ Парадокс дней рождения: почему коллизии хешей находить проще, чем кажетс…
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 →