ТаблицейБлоками.

Документация / Программы

Последняя модификация: 15.02.2018 г

Страница загружена с адреса: http://comp.site3k.ru/comp/packsdoc.html

Моя студия веб-дизайна

(Фрагмент книги «Оптимизация и спасение IBM PC»)

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

Утилиты сжатия исполняемых файлов, позволяют сжимать драйвера и программы так, что их запуск не требует предварительной распаковки. Принцип их действия аналогичен действию обычных архиваторов: сжимаемая программа снабжается SFX-заголовком, который при запуске, распаковывает ее в память и передает ей управление – поэтому разработчики архиваторов, зачастую являются и разработчиками утилит сжатия программ. Примером тому случат архиватор PkZip и утилита PkLite, архиватор Ain и утилита AinExe, Архиватор Uc и утилита UcExe. Однако механизм действия утилит сжатия программ несколько иной – одно дело распаковать на диск, другое дело распаковать в память, да так, чтобы программа себя нашла. Тут требуется и большая квалификация, и большая изобретательность. Поэтому они не так многочисленны как обычные архиваторы.

Различные типы программ имеют различную структуру. Устройство Com-файла существенно отличается от устройства Exe-файла. При этом Exe-файлы и сами не однородны. Они делятся на 32-битные программы для Windows, 16-битные программы для Windows и программы для DOS. Для каждой из этих структур используется собственный алгоритм сжатия и утилиты, обрабатывающие одни типы, могут не признавать другие. В частности, утилиты предназначенные для упаковки программ DOS, не сжимают программы Windows, и наоборот.

Кроме того, exe-файлы могут содержать, так называемые, оверлейные данные – данные, не считываемые в память при загрузке программы, а загружаемые только по мере необходимости. В зависимости от метода присоединения оверлеев и их назначения, содержащая их программа, после сжатия, частично или полностью может потерять работоспособность. В основном используется наиболее простой механизм прямого считывания данных по их физическому размещению в файле программы. После сжатия этот механизм не работает, поскольку данные меняют адресацию и, загрузчик оверлеев не находит их на прежнем месте. Иногда используется более интеллектуальный метод поиска оверлеев по специальным меткам, позволяющий корректно загружать оверлеи, даже если они были перемещены. Использующие его программы не теряют работоспособность и после сжатия, но разработчики программ редко об этом заботятся. В любом случае, основная масса утилит сжатия распознает оверлеи и выдает запрос на выполнение операции.

Существует три варианта обработки программ с оверлеями: отказаться от сжатия подобных программ, присоединить оверлеи к телу программы в несжатом виде или удалить оверлейные данные.

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

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

Однако сжатие программ производится не для того чтобы их, потом, разжимать.

Среди утилит сжатия наиболее примечательны следующие:

Diet.exe 1.45f – утилита, обеспечивающая один из лучших коэффициентов сжатия для Com-файлов, сжимающая Exe-файлы для DOS, драйвера и файлы данных (при этом, доступ к сжатым данным обеспечивается, если Diet установлен в память резидентно и обрабатывает их подобно DblSpace или ZipMagic – в этом режиме могут использоваться даже неподатливые программы с оверлеями).

AvPack.exe – утилита, иногда превосходящая Diet в области сжатия Com-файлов и часто превосходящая его в области сжатия Exe-файлов под DOS. Распаковывает файлы не только собственной упаковки, но и файлы, обработанные LzExe (при чем, качественней чем, специально для этого разработанные, программы UpackExe и UnLzExe), а так же некоторыми версиями PkLite и ExePack. Позволяет добавлять оверлеи к сжатым модулям.

PkLite.exe (версии 2.0 и выше) – утилита, имеющая много возможностей, сжимающая не только программы для DOS, но и 16-битные программы для Windows (при этом, программы Windows восстановлению не подлежат). Владеет распаковкой файлов обработанных LzExe и ExePack. Позволяет добавлять оверлеи к сжатым модулям.

UcExe.exe – утилита, которая, не смотря на создание заголовка-распаковщика, не уступает в сжатии Zip-архиватору. Однако, Com-файлы превращаются в Exe, что не всегда корректно работает и не восстановимо. Позволяет добавлять оверлеи к сжатым модулям; для переупаковки файлов обработанных ExePack или LzExe вызывает утилиту UpackExe.

Apack.exe – сжимает даже сильнее чем UcExe, позволяя сэкономить порядка пятидесяти килобайт на каждом мегабайте (в сравнении с UcExe), однако обработанные ей программы для своего выполнения требуют больше памяти (это легко обнаружить для резидентных программ, запустив программу Mem.exe и для некоторых нерезидентных программ, имеющих датчики памяти, например, архиватора Rar).

AsPack.exe – утилита сжатия 32-битных программ Windows, встраивающаяся в контекстное меню и, кроме массы возможностей и удобного интерфейса, имеющая юмористический перевод на русский язык. Однако, сжатые ей программы (как, очевидно и любые сжатые ресурсы Windows), восстановлению не подлежат.

Com2exe.exe (или ComToExe) – не вполне утилита сжатия, поскольку ничего не сжимает, но иногда она применяется для преобразования Com-файла в Exe-файл, для последующей его обработки программами, сжимающими только Exe-файлы (например LzExe.exe – самой первой программы этого класса). Такое преобразование не всегда корректно, поскольку изменение заголовка программы не меняет ее структуры (например, Volkov Commander, преобразованный ей в Exe-файл и сжатый утилитой AinExe.exe, при попытке загрузить его в верхнюю память, приводит к зависанию компьютера), но обычно, вполне приемлемо.

Cup386.com – не является утилитой сжатия, зато, аналогично программе DrWeb (но с большими возможностями), восстанавливает запакованные файлы, загружая их в память и прослеживая их поведение при выполнении. Такое восстановление не вполне корректно, поскольку использует не строгий механизм распаковки, заложенный в программах-упаковщиках, а эвристический анализ и, зачастую, вытаскивает из памяти немного мусора. По этому, оправданно только при отсутствии оригинального упаковщика или, если тот, по каким-то причинам (например, помимо упаковки файл зашифровывался), с этой работой не справляется. То же касается программы DrWed.exe и других универсальных распаковщиков.

Примеры применения упаковщиков.

(за стопроцентное сжатие принято сжатие до нуля)

ПрограммаИсходный размерПримененная утилитаПолученный размерСтепень сжатия
Драйвер языка и клавиатуры KeyRus.com22,714 КбAvPack.exe12,224 Кб46%
Программа взаимодействия с CDROM Mscdex.exe (с оверлеями)25,473 КбAvPack.exe18,166 Кб28%
Драйвер памяти HiMem.sys33,191 КбDiet.exe11,227 Кб66%
Программа проверки и исправления ошибок диска DmDos.exe213,488 КбUcExe.exe83,189 Кб61%
Редактор WinWord.exe8,441 907 МбAsPack.exe4,366 336 Мб48%

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

Заинтересованные, могут скачать набор упаковщиков про указанной ссылке:

Размер в архиве – 390,058 Байт.

Скачать!!!. Скачали 16661 раз(а).

 

Комментарии к странице (всего 3)

 

 

 


На главную страницу сайта