Пересмотр крошечного исполняемого файла Teensy

В оригинальной статье было продемонстрировано создание работающего ELF-исполняемого файла размером 45 байт, что достигалось нарушением спецификации ELF. В новом пересмотре автор показывает, как создать исполняемый файл минимального размера, но с полной соответствием стандарту. Это требует пересмотра архитектуры: вместо использования "неиспользуемых" полей заголовка, автор использует легальное перекрытие структур данных (которое явно разрешено спецификацией), и достигает 83 байта в версии со строгой спецификацией, затем 79 байт и даже 81 байт через различные трюки с регистрами и загружаемыми адресами.

Ключевые факты

  • Создание ELF-файла в 45 байт нарушает спецификацию ELF
  • Новый подход использует легальное перекрытие структур данных
  • Полностью совместимая версия достигает 79-83 байт
  • Использование неиспользуемых полей (p_paddr) для встраивания кода
  • Оптимизация загружаемого адреса для размещения кода в верхних битах

Почему это важно

Статья демонстрирует глубокое понимание формата ELF и Linux kernel. Это показывает, как система действительно работает, что полезно для low-level программистов, авторов операционных систем и создателей компиляторов.

Кому это важно

Системные программисты, энтузиасты обратного инжиниринга, разработчики компиляторов и люди, интересующиеся внутренним устройством Linux. Преимущественно для сообщества очень низкоуровневой оптимизации.

Как это применить

В практике это редко применимо - минимизация размера ELF не требуется в современной разработке. Однако техники перекрытия структур данных могут быть полезны при работе с ограниченной памятью.

Можно ли доверять

Это прямое продолжение уважаемой работы с годами истории. Автор демонстрирует примеры кода на ассемблере и объясняет каждый трюк. Информация очень техническая и проверяемая.

Риски и подводные камни

Полагаться на такие трюки опасно - это граница совместимости, и поведение может измениться с новыми версиями Linux. Код чрезвычайно сложен для понимания и поддержки.

«We have an executable that we whittled down to 45 bytes. We now want to bring it into rigid conformance with published standards, while still keeping it as small as possible.»

— muppetlabs.com, The Teensy Executable Revisited