Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Оптимизация размера программ (EXE)

Автор: vito333
Дата сообщения: 01.11.2004 15:29
Разбираясь с темой наталкивался на разные документы и исходники. Решил обобщить все в одном топике, так как постоянно встречаю вопросы об оптимизации то там, то сям.
Ниже будут ссылки на документы и файлы.

Добавлено
самая лучшая статья по оптимизации для пишущих на VC++ 6,7:
http://www.rsdn.ru/article/cpp/crt.xml
или она же:
http://www.rsdn.ru/article/?51
статья на английском - автор Matt Pietrek - опять для MS VC++ :
"Reduce EXE and DLL Size with LIBCTINY.LIB"
http://msdn.microsoft.com/msdnmag/issues/01/01/hood/default.aspx
с исходниками


Автор: redp
Дата сообщения: 01.11.2004 16:31
а смысл какой ? по скорости оптимизировать - тут да, очень даже имеет смысл
по минимизации используемой памяти - опять же да
а по размеру кода - разве только когда exploit пишешь и надо в строго ограниченный буфер уместиться. когда такая оптимизация еще нужна ?
Автор: vito333
Дата сообщения: 01.11.2004 16:57
redp
ты извини, но спорить на тему смысла - бессмысленно ))), потому не буду.


Добавлено
http://y0da.cjb.net/
в секции Code Snippets - примеры крошечных файлов как для VC++, так и для Дельфи
с исходниками

Добавлено
http://www.xtreeme.prv.pl/
дом. страница лучшего упаковщика маленьких (до ~80-100 кб) EXE файлов - FSG.
Он выигрывает у всех за счет крошечного модуля распаковки - всего 158 байт.
Автор: WiseAlex
Дата сообщения: 01.11.2004 17:27
http://www.uinc.ru/articles/28/index.shtml
Автор: vito333
Дата сообщения: 01.11.2004 17:50
WiseAlex
точно, не успел я запостить )
тема:
Написание экстра-маленьких Win32 приложений на С++ от 1 КБ используя лишь API, на примере программы Windows Hider
Автор: vito333
Дата сообщения: 04.11.2004 15:25
а если паковать ЕХЕ более или менее крупный(>100кб) и стоит задача ужать максимально или как нибудь не в лоб, то наиболее мощный по настройкам - PEcompact2 от Джереми Коллэйка, он, кстати, может легко сделать UPX по степени сжатия ЕХЕ при использовании плагина (в комплекте) c алгоритмом lzma. Правда скорость распаковки тогда чуть ниже, но выигрыш в размере бывает очень значительным.
Мне кажется, для Дельфей - отличный пакер. )
Автор: redp
Дата сообщения: 04.11.2004 16:37
vito333
кхе-кхе, выигрыш в чом ? в памяти то код занимает после распаковки столько же места плюс накладные расходы на распаковку еще
Автор: vito333
Дата сообщения: 04.11.2004 16:49
понятно в чом - только в размере файла, причем я не призываю огульно сжимать файлы - в этом тоже голова нужна. Известно же, что файлы чаще лучше не сжимать, чем сжимать, но знать об этом надо.
И памяти такая программа занимает больше. Здесь на форуме это уже обсуждалось.
Автор: Varenik
Дата сообщения: 05.11.2004 05:52
redp
Выигрыш в скорости загрузки программы: процессор всегда распакует файл быстрее, чем он может считываться с диска. паковщики типа UPX оставляют ~ 30% от воначального размера
Автор: MoKC0DeR
Дата сообщения: 05.11.2004 08:03
Varenik
и на этом все плюсы заканчиваются. Остаются одни минусы.
Автор: aar
Дата сообщения: 05.11.2004 08:22
Уважаемые, возник такой вопрос. Есть программа, написанная на Perl. Затем утилитой perlapp из нее был сделан исполняемый exe-файл, куда включена perl56.dll (платформа Windows). Размер получился около 700 kb. Каким упаковщиком лучше воспользоваться, чтобы минимизировать размер exe-файла? Ну и, как добавок, с защитой от отладчика и тому подобных вещей. Но это опционально
Автор: JustAMaaan
Дата сообщения: 05.11.2004 08:31
Если программа под Win32 большая и ее предполагается запускать больше, чем в одном экземпляре, то нужно сильно подумать, стоит ли ее вообще сжимать. Если не залезать в дебри, то код несжатого EXE, запущенного дважды, отображается в физическую память всего один раз, а вот сжатый - сначала выделяет себе столько памяти, сколько весил оригинал и распаковывает себя уже туда. Точно такой же эффект происходит и с временем запуска: второй экзампляр несжатой программы стартует практически мгновенно, а вот сжатая программа распаковывается всегда.
Автор: ShIvADeSt
Дата сообщения: 05.11.2004 08:39
JustAMaaan
Это уже писалось на форуме, просто есть случаи когда надо упаковать программу, при этом не планируется ее запускать несколько раз.
Автор: vito333
Дата сообщения: 05.11.2004 10:20
aar
по честному - только фриварный UPX, а по всем нужным тебе фичам самый лучший - PEcompact2 - и жмет превосходно (в зависимости от используемого алгоритма - можно побыстрее разжимающийся, можно посильнее сжатый), и есть даже какой-то плагин антидебаговый в комплекте, есть также плагин парольный и еще чего-то.
Но он шароварный. Но есть в Варезнике , если твой высокий моральный облик тебе позволит .

Кстати, о dll.
Там же где и PEcompact2 (Collake Software) есть превосходная шароварная утилита Pebundle - позволяет лепить dll к ЕХЕ, причем настроек тоже туева хуча - можно сделать так, что длл не будет распаковываться на диск, а будет только в памяти. Причем полученный ЕХЕ может быть сразу сжат.
Я делал такую вещь - к своему крошечному редактору (оболочка на ричедит) лепил ричедитовую ДЛЛ, а затем все это сжал PEcompact2. Получилось недурно .
Автор: aar
Дата сообщения: 05.11.2004 10:33
vito333
Благодарю

Лекарство на PECompact2 уже ищу. Но вот такой вопрос: как нибудь можно будет определить, чем произведено сжатие? Просто в этих делах не спец, было как-то знакомство с ассемблером и с отладчиком, но не до такой степени.


Цитата:
Pebundle
Попробую. В принципе, возможно сделать exe-файл с помощью perlapp и не включать в него dll, а просто распространять вместе с exe.



Добавлено
Pebundle нашел PEBundle.v3.20.Cracked-SSG.rar, буду мудрить.
Автор: vito333
Дата сообщения: 05.11.2004 10:55
aar
я брал по ссылкам в Варезнике

а PEcompact2? да и любой (практически) пакер определяется прогой PEid. Я ей постоянно пользуюсь. Чтобы не определялось - надо чего-то мудрить.

Добавлено
кстати, топик не только о сжатии ЕХЕ, но и об оптимизации при программировании.
в качестве примера использования и того и другого - маленький текстовый редактор:
http://vito.rbcmail.ru/Mark.zip
архив ~23 кб
вирусов нет - гарантирую, а то говорят, нортон ругается.
программа оптимизирована по размеру при программировании и сжата ЕХЕ-пакером (что оправдано в этом случае).
Автор: aar
Дата сообщения: 10.11.2004 12:00
vito333

Цитата:
http://vito.rbcmail.ru/Mark2.zip
архив ~23 кб

В памяти полтора метра

Сжимал PECompact'ом свою программу. Выигрыш получился меньше 10%, а вот скорость запуска возросла раза в два. Врядли возможен больший выигрыш...
Автор: UncoNNecteD
Дата сообщения: 10.11.2004 13:39
ASPack хорошо жмет и нормально работает.
У меня 2Мб дельфи-ехе превращается в 350кб и работает замечательно.
Автор: ShIvADeSt
Дата сообщения: 11.11.2004 01:57
aar

Цитата:
В памяти полтора метра

Сжимал PECompact'ом свою программу. Выигрыш получился меньше 10%, а вот скорость запуска возросла раза в два.

Ну у меня она в памяти 3100 весит, и это без открытого файла, просто надо учитывать загруженные либы.
Я сжимал свою упх и фсг, выигрыш всегда больше 50% и скорость открытия больше. Где то ты не так делал
Автор: vito333
Дата сообщения: 11.11.2004 10:10
aar
у тебя изначально файл уже такой - ты писал, что это конвертнутый ЕХЕ.

а полтора метра - чего-то мало на самом деле. Должно быть 3-4 мега. Но память - это отдельный разговор, не для этого топика. Можешь свернуть прогу, например ...
Автор: vito333
Дата сообщения: 24.11.2004 11:06
http://northfox.uw.hu/
домашняя страница еще одного пакера ЕХЕ - MEW
сжимает по алгоритму lzma, достигая зачастую максимального эффекта на сегодняшний день
на мелких файлах - до 100 кб - опережает FSG
в общем, интересный пакер, но есть баги, недоработки - они описаны
Автор: vito333
Дата сообщения: 25.11.2004 02:03
http://web.ict.nsc.ru/~cancel/delphi/
сайт, посвященный программированию на Дельфи с помощью WinAPI
Автор: vito333
Дата сообщения: 29.11.2004 09:42
попользовался пакером MEW - сразу пару багов нашел. вывод - использовать рано ...
Автор: WELLROCK
Дата сообщения: 01.12.2004 05:36
Зато MEW хорошо жмёт маленькие асмовые проги =)
И глюков с ними не замечал.
Я свои релизы им пакую.
Автор: vito333
Дата сообщения: 01.12.2004 07:12
исправляюсь )) ошибся - один якобы "баг" - оказался моей недоработкой.
Другой тоже, возможно, не из-за MEW.


Добавлено
на моей проге Mark
http://forum.ru-board.com/topic.cgi?forum=5&topic=13554&start=140#lt
выигрывает у FSG ~2кб при оригинальном размере ЕХЕ 45-46 кб. - очень хороший результат, думаю на сегодняшний день его улучшить нечем, продолжаю пробовать и тоже, наверное, буду использовать вместо FSG.
Автор: WELLROCK
Дата сообщения: 01.12.2004 07:42
На самом деле ведь всё зависит от структуры ехе.
К примеру проги с большим количеством ресурсов (типа RCData в делфи) лучше жмуться aspack'ом. Проги же где больше кода лучше жмуться upx'ом (в большинстве случаев).
А вот с маленькими прогами всё просто.
Здесь играет главную роль код распаковщика.
У FSG и MEW он написан на асме, а у того же UPX'a на Си.
Поэтому зачастую после сжатия асмового файла размером 3кб UPX'ом получаем файл в 16кб.
Автор: vito333
Дата сообщения: 01.12.2004 08:01
Aspack, по моему,давно уже отстает от лидеров паковки, причем существенно.
а роль играет не только код распаковщика, но и алгоритм сжатия - у MEW это lzma, один из наиболее сильных в настоящее время, вот он и смог сллегка обставить FSG. Pecompact умудряется при использовании lzma-кодека-плагина значительно опережать UPX. Но lzma - медленный кодек, так что тут надо подходить с умом. А что сжимать - вопрос, думаю, уже второй.
Автор: WELLROCK
Дата сообщения: 01.12.2004 08:45
ASPack отстаёт потому что солод его не обновляет.
Он все силы направил на аспр.
А насчёт алго сжатия. Всё равно их не так много и юзаются одни и те же.
ПОэтому тут и всплывает вопрос реализации алго в конкретном пакере.
И это уже как раз код распаковщика
Тем не менее для каждой конкретной программы возможны разные варианты лучшего сжатия. Поэтому и пакер надо выбирать сравнивая их друг с другом на конечной проге.
Автор: MoKC0DeR
Дата сообщения: 01.12.2004 09:09
WELLROCK

Цитата:
Здесь играет главную роль код распаковщика.
У FSG и MEW он написан на асме, а у того же UPX'a на Си.

А откуда такие данные по UPX ?!
Может я куда-то не туда смотрел(исходники от 1.24 и от 1.25), но "код распаковщика" у UPX на ассемблере.
Поправте если ошибаюсь
Автор: vito333
Дата сообщения: 01.12.2004 09:43
WELLROCK
вот поэтому я давно не юзаю Aspack

Цитата:
возможны разные варианты лучшего сжатия

на текущий момент мой выбор - Pecompact(для файлов >100кб) и FSG,MEW - для мелочи (в т.ч. для моей программы).
PEcompact вообще красавец по настройкам, ему бы малюсенький код распаковщика как опцию приделать и был бы лучшим.

Страницы: 1234567

Предыдущая тема: Интересные ИСХОДНИКИ на Delphi


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.