home.social

#компоновщик — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #компоновщик, aggregated by home.social.

  1. Как программа попадает в память: от execve до main

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

    habr.com/ru/articles/1036444/

    #Linux #strace #ELF #загрузка_программ #системные_вызовы #execve #mmap #анализ_файлов #компоновщик

  2. Размещение глобальный констант по фиксированным адресам

    В программировании микроконтроллеров порой надо сделать так, чтобы после сборки артефактов в прошивке глобальные константы оказались в строго заданных адресах NOR Flash памяти. Причем при пересборке проекта эти адреса оставались прежними. Это особенно полезно? если вы решили выделить конфигурационные и калибровочные выделить в отдельный интервал Flash памяти. Потом это требование международного стандарта программирования ISO-26262. Делается это для того, чтобы появилась возможность менять значения в этом интервале утилитой TunerPRO перед прошивкой бинаря. Фиксированные адреса позволят вам всегда иметь один и тот же *.xdf файл для утилиты TunerPRO.

    habr.com/ru/articles/966862/

    #компоновщик #iso26262 #GCC #tunerpro #tuner_pro #cortexm #arm_cortexm #ld #linker #iso26262

  3. Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI?

    Зачастую в процессе разработки собственных устройств или моддинга уже существующих, встаёт задача выполнения стороннего кода: будь то ваши собственные программы с SD-флэшек, или программы, написанные другими пользователями с помощью SDK для вашего устройства. Тема компиляторов и кодогенерации достаточно сложная: чтобы просто загрузить ELF или EXE (PE) программу, вам нужно досконально разбираться в особенностях вашей архитектуры: что такое ABI, релокации, GOT, отличие -fPIE от -fPIC, как писать скрипты для ld и т. п. Недавно я копал SDK для первых версий Symbian и основываясь на решениях из этой ОС понял, каким образом можно сделать крайне «дешевую» загрузку любого нативного кода практически на любом микроконтроллере, совершенно не вникая в особенности кодогенерации под неё! Сегодня мы с вами: узнаем, что происходит в процессе загрузки программы ядром Linux, рассмотрим концепцию, предложенную Symbian Foundation и реализуем её на практике для относительно малоизвестной архитектуры — XTensa (хотя она используется в ESP32, детали её реализации «под капотом» для многих остаются загадкой). Интересно? Тогда добро пожаловать под кат!

    habr.com/ru/companies/timeweb/

    #timeweb_статьи #bodyawm_ништячки #микроконтроллеры #микропроцессоры #esp32 #elf #binary #бинарные_файлы #exe #dll #so #executable #исполняемый_файл #программа #программы #загрузчик #линкер #linker #ld #gnu_ld #gcc #cc #xtensa #esp8266 #avr #atmega #attiny #pic #компоновщик #C #C++ #системное_программирование

  4. Выполняем сторонние программы на микроконтроллерах с Гарвардской архитектурой: как загружать программы без знания ABI?

    Зачастую в процессе разработки собственных устройств или моддинга уже существующих, встаёт задача выполнения стороннего кода: будь то ваши собственные программы с SD-флэшек, или программы, написанные другими пользователями с помощью SDK для вашего устройства. Тема компиляторов и кодогенерации достаточно сложная: чтобы просто загрузить ELF или EXE (PE) программу, вам нужно досконально разбираться в особенностях вашей архитектуры: что такое ABI, релокации, GOT, отличие -fPIE от -fPIC, как писать скрипты для ld и т. п. Недавно я копал SDK для первых версий Symbian и основываясь на решениях из этой ОС понял, каким образом можно сделать крайне «дешевую» загрузку любого нативного кода практически на любом микроконтроллере, совершенно не вникая в особенности кодогенерации под неё! Сегодня мы с вами: узнаем, что происходит в процессе загрузки программы ядром Linux, рассмотрим концепцию, предложенную Symbian Foundation и реализуем её на практике для относительно малоизвестной архитектуры — XTensa (хотя она используется в ESP32, детали её реализации «под капотом» для многих остаются загадкой). Интересно? Тогда добро пожаловать под кат!

    habr.com/ru/companies/timeweb/

    #timeweb_статьи #bodyawm_ништячки #микроконтроллеры #микропроцессоры #esp32 #elf #binary #бинарные_файлы #exe #dll #so #executable #исполняемый_файл #программа #программы #загрузчик #линкер #linker #ld #gnu_ld #gcc #cc #xtensa #esp8266 #avr #atmega #attiny #pic #компоновщик #C #C++ #системное_программирование