Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Ответ
 
Опции темы
Старый 01.01.2009, 18:16   #1
Знатный Читер
 Фельдмаршал
Аватар для Leo_ня
 
Leo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядом
Регистрация: 10.06.2008
Сообщений: 965
Популярность: 5501
Сказал(а) спасибо: 786
Поблагодарили 942 раз(а) в 598 сообщениях
Отправить сообщение для Leo_ня с помощью ICQ Отправить сообщение для Leo_ня с помощью Telegram
 
По умолчанию Сжатие полученных EXE

Самый большой недостаток в делфи, который я заметил на данный момент - это слишком большой вес скомпилированных EXE. Даже если код из 3-4 строк, весить это чудо будет 350-450 КБ.

Дело в том, что при визуальном программировании, в EXE толкается инфа из Forms.dcu и Windows.dcu (из других так же). Которые весят вместе 800~кб. Способа уменьшить их я пока не нашёл, при изменении их компилятор выдаёт ошибку: Read error.

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

Например на том же C++, асме, WinAPI получается буквально в сто раз меньше.

Ну чтож, попробуем сделать из *овна конфетку


Что нам потребуется из софта:

1. Для чистки:
Restorator, [Ссылки могут видеть только зарегистрированные пользователи. ]
Resource Hacker [Ссылки могут видеть только зарегистрированные пользователи. ]
или XN Resource Editor. [Ссылки могут видеть только зарегистрированные пользователи. ]
так же нужен StripReloc [Ссылки могут видеть только зарегистрированные пользователи. ]

Преимущества Restorator'а - самый новый, 2007-го года. В функциях различия не большие, по крайней мере я ими не пользуюсь. Один минус - 30 дней триала.

Преимущества Resource Hacker'а - старый, но в нём проще удалять лишнее, не перескакивает на прошлую директорию. Минус - не всё может открывать.

Преимущества XN Resource Editor'а - относительно новый, есть встроенный редактор картинок, курсоров. Минус - перескакивание на прошлую директорию при удалении ресурса. Очень напрягает, ведь вместо 30 кликов мыши надо сделать 90.

Я лично пользуюсь всеми сразу )) чищу сначала ResHacker'ом, потом уже XN Resource Editor. А ресторатором, когда ничем не откроешь.
Выбирайте сами)

Strip Reloc удаляет ненужную инфу (какую не знаю, я её не видел ни разу), которая не влияет на работу программы.

2. Для сжатия:
только PECompact. [Ссылки могут видеть только зарегистрированные пользователи. ]

Пробовал кучу разных пакеров.. большинство просто не работало. Сначала остановился на ASPack'е. примерно 40% от EXE остаётся. А у PECompact где-то 35%. И то, это смотря какие настройки (и иногда как повезёт )

Собственно, как это всё делается:

Имеем мы обычный прожект весом в 432 КБ.
Делаем бэкап!!!

Кидаем наш прожект в StripReloc.exe.

Фига сибе, смотрим мы. 407 КБ.
А всего то удалили какие-то таблицы релокаций.

Берём любой чистильщик.
Открываем нашу прогу (File->Open ... и ищем)

Вообще, для работы проги, нужна только RCData\TForm1. Ну или если форм больше, то и их оставлять.

Но если в программе используются некоторые окна создаваемые не ручками, например через команду InputQuery, где открывается окно с кнопками Ок\Отмена и текстовым полем. Если удалить определённый ресурс в String Table, то кнопки могут оказатся без текста. Поэтому нужно будет оставить некоторые стрингтэйблы, если вам так нужны подсказки на кнопках. Так же можно редактировать и сам текст. Просто измените нужный текст в стрингтэйбле и нажмите Compile Script.

[IMG]http://******.net/out.php/i76414_1.PNG[/IMG]

Удаляем лишнее:
[IMG]http://******.net/out.php/i76415_2.PNG[/IMG]

Однако, чтобы редактировать формы, нужно удалять таблицы релокаций ПОСЛЕ ресхака. Т.к. в TForm обрезается кусок снизу и добавляется символ "@". С ним нельзя перекомпилить.

У меня осталось только RCData\TForm1 и TForm2.
[IMG]http://******.net/out.php/i76416_3.PNG[/IMG]

Сейчас вес моего прожекта 386 КБ.

Теперь самое главное! Юзаем PECompact.
Открываем его, выбираем нашу урезанную прогу.

У меня вот такие настройки:

[IMG]http://******.net/out.php/i76417_4.PNG[/IMG]

Эксперементируйте! Для чего вам и дана кнопка "Восстановить исходные".

Так же можно поменять "Подлежащие сжатию ресурсы".
Можно поставить все. НО! Иногда, когда он находит эти ресурсы, сжимает их, вставляет инфу для расжатия, и эта инфа для расжатия может весить больше, чем сжали исходное.

У меня получился прожект весом 149 КБ. Я особо не заморачивался с настройками, поэтому можно сделать ещё меньше.

Так же кто-то говорил, что можно как-то переконвертить EXE в COM, тогда он ещё и будет сжиматься UPX'ом.

К сожалению, такой софтины я не нашёл.

Где я ошибся, поправьте, пожалуйста.

Добавлено через 44 минуты
Хм.. я уже понимаю, что неправ. Достаточно сделать project1.dpr:

program project1

uses
Windows;

begin
end.

и оно будет весить 15 кб. После всех манипуляций со сжатием вес получится ещё меньше. Если говорит "Undeclared Identifier" то нужно в uses написать требуемую библиотеку.

Например если добавить SysUtils то вес уже будет 39 КБ. Но всё равно не так уж и много.

И кста, помоему PECompact годится только для больших файлов. Для <50 кб нужны другие компрессоры. Сейчас похимичу

зы: я люблю изобретать велосипеды

Последний раз редактировалось Leo_ня; 01.01.2009 в 19:02. Причина: Добавлено сообщение
  Ответить с цитированием
11 пользователя(ей) сказали cпасибо:
Amba (20.01.2010), Babls77 (02.12.2012), DDOSer (22.02.2010), Den1S (25.01.2009), DizTerDiz (19.11.2011), GLaX (19.08.2009), goul (04.05.2013), Ivan_32 (01.01.2009), KloneB@DGuY (14.03.2010), ZeLiK (08.08.2009), ZliLO (01.01.2009)
Старый 02.01.2009, 09:17   #2
Заблокирован
 Капитан
Аватар для Ivan_32
 
Ivan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компании
Регистрация: 14.05.2008
Сообщений: 253
Популярность: 1015
Сказал(а) спасибо: 666
Поблагодарили 451 раз(а) в 173 сообщениях
Отправить сообщение для Ivan_32 с помощью ICQ Отправить сообщение для Ivan_32 с помощью Telegram Отправить сообщение для Ivan_32 с помощью Skype™
 
По умолчанию


COM это формат только для DOS по сути это чистый обьектник. Конвертирование EXE в COM означает избавить исполняемый файл от PE Header-а. Это повлечет за собой полную неработоспособность программы. Короче того кто это говорил на мыло

Кстати сжать EXE можно еще одним способом. Дело в том что асмокод может генерится компилятором в двух режимах: оптимизация по скорости и по весу exe. Соответсвующая опция должна быть в свойствах/настройках проекта. Ну а сама по себе она такая большая потому что много мусора. Например MASM генерит минимальное окно размером с 2.5 кб, а VC++ 6 16 кб. При чем и там и там идет оптимизация по скорости. Хотя это вобщем то относительная вещь. Основной упор в методике оптимизации по скорости это то что вместо циклов типа

mov ecx,100
cycle:
inc ecx
LOOP cycle
Записывается
inc ecx
inc ecx
inc ecx
... ;еще 96 раз.
inc ecx

Это конечно не единственная методика которая применяется.
Кстати! Чуть не забыл, самый эффективный метод сжатия это компилить в релизной конфигурации )) Казалось бы а чем оно может отличатся но оно действительно отличается. Штука в том что компилятор очень много левых данных пишет в exe при debug - mode. Переключить с Debug на Release можно в меню Build. Там должен быть такой пункт.

Да кстати, чуть не забыл , самый радикальный метод. Можно сжать PE Header руками через Hex редактор. Я лично своими глазами видел PE Header длиной 32 байта. Как освою методику, напишу гайд.
PS: Вот вам кстати и ответ почему у нас мало гайдов - то что я не понимаю я не выкладываю

Последний раз редактировалось Ivan_32; 02.01.2009 в 12:59. Причина: Добавлено сообщение
  Ответить с цитированием
4 пользователя(ей) сказали cпасибо:
Babls77 (02.12.2012), Leo_ня (02.01.2009), Nacionalist (18.11.2014), ZeLiK (08.08.2009)
Старый 02.01.2009, 16:47   #3
Знатный Читер
 Фельдмаршал
Аватар для Leo_ня
 
Leo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядомLeo_ня в состоянии испепелить взглядом
Регистрация: 10.06.2008
Сообщений: 965
Популярность: 5501
Сказал(а) спасибо: 786
Поблагодарили 942 раз(а) в 598 сообщениях
Отправить сообщение для Leo_ня с помощью ICQ Отправить сообщение для Leo_ня с помощью Telegram
 
По умолчанию

куча пакеров, меняй хоть каждый день ))
ftp://ftp.elf.stuba.sk/pub/pc/pack/
  Ответить с цитированием
Пользователь сказал cпасибо:
Ivan_32 (02.01.2009)
Старый 08.08.2009, 04:38   #4
 Разведчик
Аватар для ZeLiK
 
ZeLiK на правильном путиZeLiK на правильном пути
Регистрация: 13.07.2009
Сообщений: 10
Популярность: 104
Сказал(а) спасибо: 28
Поблагодарили 48 раз(а) в 33 сообщениях
 
Red face Re: Сжатие полученных EXE

Добавлю чуть, но это для тех, кто хорошо себя ощущает в делфе и знает как устроены эти библиотеки... Слышал, но на практике не применял, что можно из библиотеки "выудить" только нужное для себя, или отредактировать саму библиотеку, естественно сделав её бэкап.
з.ы. как вариант борьбы с "весом" библиотек
________________
ГОНЯЮСЬ за СПАСИБО и за кол-вом сообщений, но получается плохо (( поможете!? ))
С уважением, ZeLiK
  Ответить с цитированием
Старый 02.12.2009, 09:13   #5
 Разведчик
Аватар для Vo1T
 
Vo1T никому не известный тип
Регистрация: 29.11.2009
Сообщений: 4
Популярность: 18
Сказал(а) спасибо: 0
Поблагодарили 4 раз(а) в 3 сообщениях
 
По умолчанию Re: Сжатие полученных EXE

Пользуюсь [Ссылки могут видеть только зарегистрированные пользователи. ] особенно применимо к программам написанным на Delphi даже если вы используете создание окон на "чистом WinAPI" исходный размер получится минимальный ... говорят что защищает он от декомпиляции ... но я в это не верю [Ссылки могут видеть только зарегистрированные пользователи. ]
З.Ы. Кину и я каменюку в тот огород о котором говорит ZeLiK почти все миниатюрные программки делаю по моему шаблону (код как у сишного приложения получается ))) то размер получается минимальный, хотя если писать на асме то получится ещё меньше

Последний раз редактировалось Vo1T; 02.12.2009 в 09:21.
  Ответить с цитированием
Пользователь сказал cпасибо:
DeZepTup (08.02.2010)
Старый 07.02.2010, 16:52   #6
 Разведчик
Аватар для wellenstorm
 
wellenstorm на правильном пути
Регистрация: 14.05.2009
Сообщений: 3
Популярность: 96
Сказал(а) спасибо: 0
Поблагодарили 43 раз(а) в 11 сообщениях
 
По умолчанию Re: Сжатие полученных EXE

Цитата:
Сообщение от Vo1TПосмотреть сообщение
З.Ы. Кину и я каменюку в тот огород о котором говорит ZeLiK почти все миниатюрные программки делаю по моему шаблону (код как у сишного приложения получается ))) то размер получается минимальный, хотя если писать на асме то получится ещё меньше

Зачем вновь изобретать велосипед? Тратить время и писать прорисовку окна, када это можно сделать выпилив из ВЦЛ библиотек ненужное и оставить там только самое необходимое?! На крайняк многие советуют юзать КОЛ (сеня почитал об этом - там технология на много пе*дее чем у борланда - пруфлинки не выкладываю, инфы достаточно на луркморе и педивики).
Вот недавно писал троян_даунлоадер. С борлдандовскими ВЦЛ-ками вышло как обычно - около 300Кб, 200 из которых тупо мусор. Выпилил из библиотек всю ****ь что была не нужна. Файл получился размером в 100Кб. Не останавливаясь на достигнутом начал копать в строну виндовых библиотек (динамик линк либрари), дабы не трогать борландовские вообще. В итоге вылез файл размером в 4Кб (после удаления пакэйдж инфы стал 3Кб), который после сжатие FSG стал весить 933 байта! Да и по существу стал проги писать без интерфейса (подался в вирмейкеры ).

Последний раз редактировалось wellenstorm; 07.02.2010 в 16:55.
  Ответить с цитированием
Старый 08.02.2010, 05:25   #7
 Разведчик
Аватар для Vo1T
 
Vo1T никому не известный тип
Регистрация: 29.11.2009
Сообщений: 4
Популярность: 18
Сказал(а) спасибо: 0
Поблагодарили 4 раз(а) в 3 сообщениях
 
По умолчанию Re: Сжатие полученных EXE

Цитата:
Сообщение от wellenstormПосмотреть сообщение
многие советуют юзать КОЛ

я не советую ... писать на чистом WinAPI приятнее (тем более если есть знания C++ именно там точно таким же методом создаётся окно) а кол ужас - у него несовместимость с процессором пентиум 200 и вин 7 с ним не стыкуется библиотека стара как веник - никто не обновлял уже тыщу лет
  Ответить с цитированием
Пользователь сказал cпасибо:
DeZepTup (08.02.2010)
Старый 14.02.2010, 14:26   #8
 Разведчик
Аватар для wellenstorm
 
wellenstorm на правильном пути
Регистрация: 14.05.2009
Сообщений: 3
Популярность: 96
Сказал(а) спасибо: 0
Поблагодарили 43 раз(а) в 11 сообщениях
 
Cool Re: Сжатие полученных EXE

Цитата:
Сообщение от Vo1TПосмотреть сообщение
я не советую ... писать на чистом WinAPI приятнее (тем более если есть знания C++ именно там точно таким же методом создаётся окно) а кол ужас - у него несовместимость с процессором пентиум 200 и вин 7 с ним не стыкуется библиотека стара как веник - никто не обновлял уже тыщу лет

Хм, спасибо за просвещение. В данный момент стараюсь все проги писать на WinAPI функциях. Ведь именно таким образом я начинаю понимать как на самом деле работает винда и что делает та или другая функция! То что в дельфи можно написать пятнадцатью строчками (используя кривые компоненты которые похожи на снежные комы) на WinApi у меня займет всего строки две - вызов виндовой функции с нужними параметрами - всё! Ничего лишнего! И, повторюсь, пишу проги без интерфейса, меньше нагрузки и ошибок в работе программы. Ну а кто уж любит красивости, думаю всегда сообразит как безинтерфейсной проге написать визуализацию (как это было с upx пакером или пе компакт)

Последний раз редактировалось wellenstorm; 14.02.2010 в 14:30.
  Ответить с цитированием
Старый 16.02.2010, 14:39   #9
 Разведчик
Аватар для unc0r3x
 
unc0r3x на правильном путиunc0r3x на правильном пути
Регистрация: 09.02.2010
Сообщений: 8
Популярность: 104
Сказал(а) спасибо: 19
Поблагодарили 41 раз(а) в 19 сообщениях
 
По умолчанию Re: Сжатие полученных EXE

Вместо ASPack пробовал кто Upack? По-моему уровень сжатия выше.
  Ответить с цитированием
Старый 21.02.2010, 12:08   #10
 Разведчик
Аватар для wellenstorm
 
wellenstorm на правильном пути
Регистрация: 14.05.2009
Сообщений: 3
Популярность: 96
Сказал(а) спасибо: 0
Поблагодарили 43 раз(а) в 11 сообщениях
 
По умолчанию Re: Сжатие полученных EXE

Цитата:
Сообщение от unc0r3xПосмотреть сообщение
Вместо ASPack пробовал кто Upack? По-моему уровень сжатия выше.

Где-то в рунете была куча статей по сравнению пакеров. Вообще, лучше писать свой пакер. Ни один авир не сможет его распаковать на своей вирт машине и будет думать, что это и есть исходный экзешник.
  Ответить с цитированием
Старый 19.03.2010, 00:33   #11
 Разведчик
Аватар для BAHEK
 
BAHEK на правильном пути
Регистрация: 07.01.2010
Сообщений: 47
Популярность: 42
Сказал(а) спасибо: 2
Поблагодарили 16 раз(а) в 14 сообщениях
 
По умолчанию Re: Сжатие полученных EXE

Попробуйте лутше вот этот у паковщик - hmiPack1.2 самое лутшее сжатие, Upack нервно курит в старонке.

>>Где-то в рунете была куча статей по сравнению пакеров.
*****lab.ru/f
  Ответить с цитированием
Старый 31.03.2010, 03:58   #12
 Разведчик
Аватар для quex
 
quex на правильном пути
Регистрация: 16.02.2010
Сообщений: 5
Популярность: 20
Сказал(а) спасибо: 0
Поблагодарили 5 раз(а) в 4 сообщениях
 
По умолчанию Re: Сжатие полученных EXE

после компиляции кода

Код:
program project1

uses
Windows;

begin
end.
имеем экзешник с тем же весом в 15 кбайт, без всяких дополнительных манипуляций
а после упаковки тем же аспаком, например, вес экзешника составляет 13 кб, так что автор помойму действительно изобретает велосипед..
  Ответить с цитированием
Старый 16.11.2011, 21:39   #13
Знаток Dark Orbit
 Рыцарь-защитник
Аватар для Mebius
 
Mebius трижды герой Советского СоюзаMebius трижды герой Советского СоюзаMebius трижды герой Советского СоюзаMebius трижды герой Советского СоюзаMebius трижды герой Советского СоюзаMebius трижды герой Советского СоюзаMebius трижды герой Советского СоюзаMebius трижды герой Советского СоюзаMebius трижды герой Советского СоюзаMebius трижды герой Советского СоюзаMebius трижды герой Советского Союза
Регистрация: 14.06.2010
Сообщений: 584
Популярность: 6626
Сказал(а) спасибо: 86
Поблагодарили 847 раз(а) в 266 сообщениях
Отправить сообщение для Mebius с помощью ICQ Отправить сообщение для Mebius с помощью Skype™
 
По умолчанию Re: Сжатие полученных EXE

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

кстати можно перекомпилировать файлы system, windows, forms и тд, вырезая все не нужное в данной проге и кидая рядом с проектом приготовленные файлы, компиляторы си и си++ языков это делают за программиста, а вот делфистам приходиться делать это в ручную
  Ответить с цитированием
Старый 16.11.2011, 21:54   #14
Reaper
 Фельдмаршал
Аватар для Dinmaite
 
Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(
Регистрация: 13.08.2009
Сообщений: 1,004
Популярность: 25098
Золото Zhyk.Ru: 350
Сказал(а) спасибо: 110
Поблагодарили 830 раз(а) в 395 сообщениях
Отправить сообщение для Dinmaite с помощью ICQ
 
По умолчанию Re: Сжатие полученных EXE

Цитата:
Сообщение от MebiusПосмотреть сообщение
компиляторы си и си++ языков это делают за программиста, а вот делфистам приходиться делать это в ручную

Это довольно спорный вопрос. Поскольку часть библиотек, используемых при создании проекта в С и С++ линкуется рантайм из пакета, поставляемого вместе с виндой.
А делфи все библиотеки компилирует вместе с файлом программы, что можно перенастроить, но тогда нужно будет передавать еще и библиотеки, поскольку микромягкие отказали борланду (а затем и новому хозяину) в размещении библиотек в поставке винды (собственно говоря их вполне можно понять).
  Ответить с цитированием
Старый 24.11.2012, 10:08   #15
Подпольщик Aion
 Рыцарь-капитан
Аватар для Tr0y
 
Tr0y троюродный дядя Чака НоррисаTr0y троюродный дядя Чака НоррисаTr0y троюродный дядя Чака НоррисаTr0y троюродный дядя Чака НоррисаTr0y троюродный дядя Чака НоррисаTr0y троюродный дядя Чака НоррисаTr0y троюродный дядя Чака НоррисаTr0y троюродный дядя Чака НоррисаTr0y троюродный дядя Чака НоррисаTr0y троюродный дядя Чака НоррисаTr0y троюродный дядя Чака Норриса
Регистрация: 18.10.2009
Сообщений: 477
Популярность: 7804
Золото Zhyk.Ru: 115
Сказал(а) спасибо: 85
Поблагодарили 498 раз(а) в 172 сообщениях
 
По умолчанию Re: Сжатие полученных EXE

Большой размер пустой формы?
Идем в Project > Options > Packages > Runtime Packages

Там меняем флаг с False, на True.

Эта опция говорит, что ненадо в проект пихать дельфичьи сурсы форм и компонентов, а использовать стандартные виндузные. Если у вас имеются сторонние комопоненты, то придется их включить отдельно в список поддерживаемых (таскать с собой и подключать самому)

Для уменьшения размера также подходит опция для компилятора(подробности в интернетах):
Цитата:
{$SETPEFLAGS IMAGE_FILE_RELOCS_STRIPPED}

{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}

И не забываем что дебаг и релиз версии из панели Project Manadger по размеру отличаются, благов в последних дельфитинах есть предустановки и достаточно выбрать релиз как опции выдерут из екзешника инфу для дебага, что уменьшит размер еще на порядок.

Последний раз редактировалось Tr0y; 07.12.2012 в 17:57.
  Ответить с цитированием
Ответ

Метки
вес, delphi, exe, программирование, сжатие


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Soft] Несколько моих любимый прог))) Растаман Rising Force Online 63 27.08.2010 18:49

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 02:36.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net