Главная » Статьи » Delphi » Статьи Delphi

Скачивать материалы с сайта, могут только зарегистрированные пользователи.
Для регистрации заполните два поля ниже!

Через минуту Вы получите "Гостевой доступ"




Минимальное приложение в Delphi
Минимальное приложение в Delphi

Для всех давно уже не секрет что использование VCL значительно увеличивает размер исполняемого файла созданного в Delphi. Но далеко не многие знают как избавиться от этих благ с целью уменьшения размера исполняемого файла. И даже не все те кто знают как это сделать, смогут написать программу размером в 524 байта! Собственно, такая программка и является целью данной статьи :)

 Итак, приступим!
 Инструменты: Delphi (проверялось на 7 версии), Restorator, migeel's Realigner, fakecom.com и UPX.

 Что и для чего нужно по порядку:
 Delphi – будет средой для написания нашего “монстра”! (собственно ничего кроме DCC32.EXE нам от неё не нужно :)
 Restorator – компилятор Delphi имеет хорошую привычку – писать в секцию “RCData” ресурса EXE файла debug информацию обо всех используемых модулях в программе. А вот при помощи этой утилиты мы сможем избавиться от этой секции!
 migeel's Realigner – утилитка, позволяющая уменьшить размер EXE файла, путем удаления таблицы релокаций, которая (в случае программ на Delphi) является абсолютно неиспользуемым балластом и может быть совершенно безболезненно удалена. Но иногда аналогичная программа StripReloc даёт лучшие результаты.
 fakecom.com – а вот этот “маньяк” размером в 60 байт, переконвертирует наш EXE в com файл! Зачем? Да за тем что у com файлов не имеется Win32/PE секции заголовка, как и самого заголовка вообще :)
 UPX – программа сжимающая исполняемые файлы. В нашем случае это будет полученный при помощи fakecom.com COM файл.

 Но даже если использовать все эти утилиты размер EXE не уменьшится ниже чем 3 кб. В чём же может быть проблема? Ответ на данный вопрос очевиден – в самой Delphi :)

 Теперь нужно найти эту проблему. Многие сваливают всё на компилятор, и это связанно с не знанием самой структуры Delphi. Для того чтобы скомпилировать dpr файл, компилятору необходимы всего 2 модуля: System, SysInit. Именно в них лежат основные процедуры для работы со строками, файлами, динамическими массивами, памятью и т.п. Т.е. всё что облегчает жизнь обычному Delphi программисту, но ведь Вы не обычный программист?! Вы в некоторй степени - “извращенец”, раз вам интересна данная статья! В противном случае попрошу завершить чтение, дабы не травмировать Вашу психику ;)

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

"System.pas"
unit System;
interface

procedure _InitExe;
procedure _HandleFinally;
procedure _halt0;
procedure ExitProcess(Code: LongWord); stdcall; external 'kernel32.dll';


type
TGUID = record
D1 : LongWord;
D2 : Word;
D3 : Word;
D4 : array [0..7] of Byte;
end;

implementation

procedure _InitExe;
asm
end;

procedure _HandleFinally;
asm
end;

procedure _halt0;
begin
ExitProcess(0);
end;

end.
"SysInit.pas"
unit SysInit;
interface

implementation

end.
 Вот оно! Свершилось, мы сознательно отказались от всех благ Delphi!
 Но теперь нужно заставить Delphi компилятор брать именно наши системные заголовки. Для этого их необходимо скомпилировать в dcu библиотеки.
 Создаём папку, в неё кидаем наши pas заголовки и DCC32.EXE который можно взять тут “C:\Program Files\Borland\Delphi7\Bin”.
 В папку также кидаем все утилиты которые нам понадобятся (UPX, Realigner, fakecom.com) и создаём Project1.dpr с вот таким кодом:
program Project1;
begin
end.
Теперь в этой папке необходимо создать файл make.bat следующего содержания:
dcc32 -q system sysinit -m -y -z -$D-
dcc32 project1.dpr
 Данный BAT файл поможет скомпилировать программу. Ну чего же мы ждём? Запускай!
 В результате появится наш долгожданный EXE’шник!
 Смотрим на его размер… 3 584 байт!!! Это уже хорошо, но в начале статьи я обещал программу в 524 байта! :)

 При помощи программы Restorator 2004 удалим не нужный нам ресурс со страшными именем “RCData”.
 Смотрим на размер EXE… 3 072 байт!
 Следующие наши действия советую автоматизировать путём создания файлика make_min.bat:
realign Project1.exe
copy /B fakecom.com+Project1.exe Project1.com
upx --best Project1.com
 Первая строка “покоцает” таблицу ровнения EXE файла, вторая преобразует его в COM, а третья сожмёт.
 Итак! 3…2…1…ЖМИ!!!
 Не пройдёт и секунды как в папке появится Project1.com размер которого ровно 524 байта!!! (В различных версиях Delphi результат может меняться)
 Программа конечно же ничего не делает, но даже это рассеивает сомнения многих программистов по поводу громоздкости программ написанных на Delphi ;)

 Под конец хотел бы рассказать, что Вас ждёт при написании подобных программ:
 НЕТ менеджера памяти, процедур для работы со строками и динамическими массивами, вследствии чего работа с оными будет производиться с использованием процедур и функций Win API, но это же Вас не остановит? ;)

Удачи!

 P.S.
  Есть более "суровый" метод, который позволит добиться размера в 478 БАЙТ (!!!) но для этого, необходимо использовать Delphi 3 компилятор и Microsoft линковщик. Пример такой "минимальной" программы, находится здесь

 Пример ещё одной программы (884 байта) к статье с утилитами: Delphi_min.zip
 Многим смогут помочь, модули (system.pas, windows.pas и opengl.pas) немного переписанные ещё одним "извращенцем" - ShTiRLiC (http://progsoft.tk)

Категория: Статьи Delphi | Добавил: c1 (2009 Июль 09)
Просмотров: 1617 | Теги: Минимальное приложение в Delphi | Рейтинг: 0.0/0

Выразить благодарность - Поделиться с друзьями!

 

Здесь все о технической стороне 1С!

 

Узнай, как правильно администрировать 1С Предприятие
Регистрируйся на бесплатный 7-ми дневный курс сейчас:

Ваш E-Mail в безопасности



Всего комментариев: 0
avatar