Cosmopolitan - стандартаная Си-библиотека и формат кроссплатформенных исполняемых файлов
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Доступен первый выпуск проекта 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
===========
Похожие новости
- Главная ссылка к новости (https://news.ycombinator.com/i...)
- OpenNews: Прекращение поддержки формата исполняемых файлов a.out в ядре Linux
- OpenNews: Анализ использования фрагментов уязвимых библиотек в исполняемом коде
- OpenNews: Завершено бета-тестирование подсистемы для запуска исполняемых файлов Linux в Windows
- OpenNews: Для ядра Linux предложена реализация белого списка исполняемых приложений
- OpenNews: FatELF - формат для упаковки в исполняемый файл поддержки разных платформ
Похожие новости:
- [Робототехника, История IT, Научно-популярное, Транспорт] Сто лет истории беспилотных автомобилей (перевод)
- [Настройка Linux, Open source, IT-инфраструктура, DevOps, Облачные сервисы] Ламповая self-hosted инфраструктура на Vultr
- [Управление персоналом, Читальный зал] Гипертимезия и эволюция в IT
- [CSS, Клиентская оптимизация] DRY CSS: Как использовать каждое объявление только один раз (перевод)
- [Python, Разработка под Linux] Разработка механизма распараллеливания кода на языке python с использованием docker-контейнеров
- [Oracle, Java, Карьера в IT-индустрии] Мой путь к получению Oracle Certified Associate и Oracle Certified Professional
- Выпуск стандартной Си-библиотеки PicoLibc 1.4.7
- [Транспорт] Tesla выпустила полноценный автопилот на дорогах
- [Анализ и проектирование систем, Ненормальное программирование, Программирование, Системное программирование] История двух стандартных библиотек Си (перевод)
- Выпуск системной библиотеки Glibc 2.32
Теги для поиска: #_cosmopolitan, #_libc, #_exec, #_elf
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 20:49
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Доступен первый выпуск проекта 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... Вызов 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 =========== Похожие новости
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 20:49
Часовой пояс: UTC + 5