|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Уменьшение размера EXE
Открываю я делфи (XE). Убираю юнит. В файле проекта убираю все строчки, кроме Begin и End. Лезу в настройки компиляции. Убираю все, что можно убрать (все проверки, дебаг инфу и т.д.) и нажимаю CTRL+F9. Получаю файл весом в 20кб.
Далее открываю екзешник дизассемблером IDA PRO и ужасаюсь... делфа по умолчанию пишет такую тучу функций, что становится плохо. Такой вопрос: можно ли заставить делфу рачительнее относиться к коду? Ведь одно дело если я пишу используя их стандартные библы, и совершенно другое, если я хочу написать на чистом WinAPI. Visual Studio например умещает пустой файл в 6-7кб (хотя я считаю, что это тоже многова-то), значит в этом по идеи нет ничего особенно сложного. jmp $ ; Happy End! The Cake Is A Lie. |
#2
|
|||
|
|||
Не получится.
Дело в том, что по умолчанию включается в проект модуль System. Все, что в нем, будет в бинарнике. С другой стороны, если бы будешь писать что-то более-менее большое, то эти 20 кб потом все-равно будут незаметны на фоне остального кода, так что особо напрягаться не стоит. |
#3
|
||||
|
||||
В IDA PRO код примерно такой:
Код:
push ebp .itext:004050AD mov ebp, esp .itext:004050AF add esp, 0FFFFFFF0h .itext:004050B2 mov eax, offset dword_40406C .itext:004050B7 call @Sysinit@@InitExe$qqrpv ; Sysinit::__linkproc__ InitExe(void *) .itext:004050BC call sub_40370C В то время как чистый проект после плясок с бубном в VS10 (оказалось он сжимается до 2кб) выглядит как Код:
push 0 call Exit_Process Может можно убрать систем? jmp $ ; Happy End! The Cake Is A Lie. |
#4
|
||||
|
||||
Люблю я такие темы .
Ниже исходник окна на делфи без модулей на Api + сжатие итого = 1.3кб Запускать батник для компиляции. http://zalil.ru/30663794 If end Then begin; |
#5
|
||||
|
||||
Во, другое дело, спасибо
А скажите пожалуйста, есть ли возможность поменять командную строку запуска в делфе, чтоб не делать батник? jmp $ ; Happy End! The Cake Is A Lie. |
#6
|
||||
|
||||
Код в MinProg.dpr компилируется с помощью компилятора
DCC32.exe + необходимые модули SysInit.pas и System.pas потом готовая ехешка сжимается FSG.exe Вышеперечисленную последовательность действий делает батник. Так что без него некуда. Делфи вобще может и не быть установленный на компе, всё что нужно находиться в архиве. Если просто откомпилировать в Delphi а потом сжать FSG то выходит 7.3кб If end Then begin; Последний раз редактировалось AND_REY, 13.03.2011 в 20:18. |
#7
|
||||
|
||||
Не, я про другое. Без сжималки выходной файл весит 4кб. Вот я и думаю, можно ли сидя в нормальной среде как обычно нажимать F9, но командная строка чтобы была как в батнике для DCC32, чтобы он использовал именно те SYSTEM и SYSINIT, что в папке, и компилил с теми же параметрами. А потом уже если понадобится релиз-версию сжать через FSG отдельно.
И еще желательно заставить делфу воспринимать именно эти файлы system и sysinit (не переписывая те, что в папке source\sys\) jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 13.03.2011 в 20:35. |
#8
|
||||
|
||||
Не знаю, не пробовал так, но думаю врядли получиться не трогая файлы Delphi так компилировать.
If end Then begin; |
#9
|
||||
|
||||
А так если попробовать: Uses System in 'system.pas' (имя урезанного пасника) ?
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию Последний раз редактировалось M.A.D.M.A.N., 13.03.2011 в 22:16. |
#10
|
||||
|
||||
Identifier Redeclared: 'System'...
Так что все равно предварительно убрать надо стандартный jmp $ ; Happy End! The Cake Is A Lie. |
#11
|
||||
|
||||
В MSVS можно собрать в 1к пустой файл.
Делфи тоже можно собрать в 1к, но такой изврат тебе не подойдет, он чисто теоретический, типа мол видите и в делфи можно собрать в 1к. Меня греют ваши плюсы к моей репутации... |
#12
|
||||
|
||||
В тему Где то на форуме видел, вручную можно собрать 153 байта.
Меньше не слыхал. If end Then begin; |
#13
|
||||
|
||||
Меня греют ваши плюсы к моей репутации... |
#14
|
||||
|
||||
В com файле там и 1 байт будет.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#15
|
|||
|
|||
ну дык речь про Delphi. Можно попробовать KOL компоненты, они сильно уменьшают.
|