UPX

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
UPX
the Ultimate Packer for eXecutables
Тип

Упаковка исполняемых файлов

Написана на

C++, Ассемблер

Операционная система

Microsoft Windows, Linux, MacOS, DOS, Atari

Первый выпуск

26 мая 1998 года

Последняя версия

3.91 (30 сентября 2013 года)

Лицензия

GNU GPL

Сайт

upx.sourceforge.net

UPX (the Ultimate Packer for eXecutables) — упаковщик исполняемых файлов, поддерживающий несколько различных платформ и форматов файлов. Является свободным и открытым программным обеспечением, и распространяется по лицензии GNU GPL.

Описание[править | править вики-текст]

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

Преимущества и недостатки[править | править вики-текст]

Упаковка исполняемого файла позволяет уменьшить занимаемое программным обеспечением место (что может быть критично в случае передачи через сети или выпуске ПО на носителе ограниченной ёмкости).

Использование сегментов в памяти (в операционных системах Windows) не позволяет операционной системе высвобождать сегменты исполняемого кода без выгрузки содержимого в файл подкачки (что, фактически, увеличивает требования программы к оперативной памяти). Некоторые программы не способны работать в сжатом виде, так как используют малодокументированные (или недокументированные) возможности операционной системы по работе с исполняемыми файлами. В случае распаковки во временный файл (unix-подобные системы) программа теряет возможность использовать argv[0], статус suid-бита игнорируется.

Самым весомым и неоспоримым преимуществом является ускорение считывания и запуск сжатых файлов с носителей информации, помимо высвобождения дополнительного свободного пространства на внешних накопителях информации. К сожалению, на сегодняшний день все внешние накопители информации всё также остаются самыми медленными узлами современных вычислительных систем, «тормозящими» быстродействие системы в целом, как и на заре вычислительных технологий. Поэтому нельзя не оценить эффект, возникающий при системном применении упаковщиков исполняемых файлов, таких, как UPX. Вычислительная система затрачивает на порядок меньше времени на считывание и распаковку сжатого файла в оперативной памяти, нежели на простое считывание этого же, неупакованного файла (при считывании с внешнего накопителя время, затрачиваемое на операцию исчисляется миллисекундами, время, затрачиваемое на обработку данных в оперативной памяти исчисляется микро- и наносекундами).

Используемые алгоритмы[править | править вики-текст]

UPX использует алгоритм сжатия без потерь, называющийся UCL (свободная реализация алгоритма NRV (англ. Not Really Vanished)).[1]

UCL-декомпрессор достаточно прост, чтобы быть реализованным в нескольких сотнях байт, и при работе не требует выделения дополнительной памяти.

Следующая значительная версия UPX (3.0) также использует алгоритм LZMA на 32/64 битных платформах.

Поддерживаемые форматы[править | править вики-текст]

Практическое использование[править | править вики-текст]

В ранних версиях WinRAR SFX-модули были упакованы UPX.

Примечания[править | править вики-текст]

Ссылки[править | править вики-текст]