Cosmopolitan - стандартаная Си-библиотека и формат кроссплатформенных исполняемых файлов

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
28-Дек-2020 12:30

Доступен первый выпуск проекта Cosmopolitan, развивающего стандартную Си-библиотеку и универсальный формат исполняемых файлов, который можно использовать для распространения программ для разных операционных систем. Получаемый при статическом связывании с предложенными libc и runtime файл пригоден для исполнения в любом дистрибутиве Linux, macOS, Windows, FreeBSD и OpenBSD. Код проекта распространяется под лицензией ISC (упрощённый вариант MIT/BSD).
Контейнер для формирования универсальных исполняемых файлов основан на совмещении специфичных для разных Unix-подобных операционных систем сегментов и заголовков (ELF, MACHO, OPENBSD) в одном файле. Для обеспечения запуска одного исполняемого файла в Windows и Unix-системах применяется трюк, суть которого в кодировании файлов Windows PE в виде shell-скрипта, пользуясь тем, что Thompson Shell не использует маркер скриптов "#!". В итоге создаётся исполняемый файл, в котором скомбинировано несколько разных форматов, используемых в Unix, Windows и macOS. Схема предложенного формата (пример приложения hello.com:
MZqFpD='
   BIOS BOOT SECTOR'
   exec 7<> $(command -v $0)
   printf '\177ELF...LINKER-ENCODED-FREEBSD-HEADER' >&7
   exec "$0" "$@"
   exec qemu-x86_64 "$0" "$@"
   exit 1
   REAL MODE...
   ELF SEGMENTS...
   OPENBSD NOTE...
   MACHO HEADERS...
   CODE AND DATA...
   ZIP DIRECTORY...
Вначале файле указывается метка "MZqFpD", которая воспринимается как заголовок формата Windows PE. Данная последовательность также декодируется в инструкции "pop %r10 ; jno 0x4a ; jo 0x4a", а строка "\177ELF" в инструкцию "jg 0x47", которые применяются для проброса на точку входа. В Unix-системах выполняется shell-код, в котором используется команда exec с передачей исполняемого кода через неименованный канал. Ограничением предложенного метода является возможность запуска в Unix-подобных ОС только с использованием оболочек, поддерживающих режим совместимости с Thompson Shell. Прямой запуск при помощи системного вызова exec не сработает.
Вызов qemu-x86_64 предусмотрен для реализации дополнительной переносимости и позволяет выполнить скомпилированный для архитектуры x86_64 кода на платформах, отличных от x86, например, на платах Raspberry Pi и устройствах Apple, укомплектованных процессорами ARM. Проект также может использоваться для создания самодостаточных приложений, работающих без операционной системы (bare metal). В таких приложениях к исполняемому файлу прикрепляется загрузчик, а программа выступает в роли загружаемой операционной системы.
В развиваемой проектом стандартной Си-библиотеке libc предложено около 1400 функций, позволяющих создавать консольные приложения. По производительности Cosmopolitan работает также быстро как и glibc и заметно опережает Musl и Newlib, при том, что Cosmopolitan по размеру кода на порядок меньше glibc и примерно соответствует Musl и Newlib. Для оптимизации часто вызываемых функций таких как memcpy и strlen, дополнительно используется техника "trickle-down performance", при которой для вызова функции применяется макрос-обвязка, в котором компилятор информируется о задействованных в процессе выполнения кода регистрах CPU, что позволяет экономить ресурсы при сохранении состояния CPU за счёт сохранения только изменяемых регистров.
Для создания программ, включающих несколько файлов (компоновки всех ресурсов в один файл), поддерживается формирование универсального исполняемого файла в виде специально оформленного ZIP-архива (содержимое можно посмотреть командой "unzip -v", но файл при этом остаётся доступным для прямого запуска).
===========
Источник:
OpenNet.RU
===========

Похожие новости: Теги для поиска: #_cosmopolitan, #_libc, #_exec, #_elf
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 22-Ноя 15:24
Часовой пояс: UTC + 5