|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
06.10.2007, 13:17 | #1 |
Редкий тунеядец
Форумчанин
Регистрация: 29.10.2006
Сообщений: 595
|
Микросайзовый кодинг в делфи
Господа, предлагаю эту тему занять обсуждение темы разработки микроразмерных приложений в Delphi... Я понимаю конечно, что многим эти методики кажутся избыточными в отношении зло*бистости кода, но многим, кто хочет, не сходя с любимой платформы, писать такие приложения как: Трояны, Черви, Вирусы, Стабы джоинеров, Креки или просто не хочется отставать от любителей более компактного кода.. Методика в общем-то не является секретной.. и понять её суть просто...
Суть метода в следующем: Пишем программу на чистом WinApi не применяя тип string и не используя паскальных функций из модулей SYSTEM, SYSINIT переносим все типы и объявляем импорт процедур и функций.. Далее есть два направления: 1)Избавляемся от RTL из модулей SYSTEM, SYSINIT компилируем модули кидаем их в каталог с программой (pas,dcu)... После этого несложного действия программа весит начиная от 3584 байт))), причём прирост размера с написанием кода незначительный и ехе-ники очень капитально пакуются пакером (например FSG) и размер ехе становится примерно от 1Кб... Содержание модулей SYSTEM, SYSINIT можете найти в интернете или взять из статьи МС-РЕМа в 8 номере журнала ][акер за 2005 -статья "Делфи всемогущий"... Но те модули имеют недостаток... - ехе еонечно получаются но завершаются они с ошибками... я предлагаю свой вариант этих модулей.. SYSTEM.PAS Код:
Код:
2)Размещаем программу в модуль (*.pas) и делаем одну глобальную процедуру в которую кидаем основную часть (процедура не должна иметь локальных переменных и параметров), после этого делаем вызов процедур апишных такого типа: function GetCommandLine: PChar; stdcall; external kernel32 name '_GetCommandLineA@0'; Компилируем модуль в объектный файл C++ и собираем из этого файла exe с назначением точки входа на глобальную процедуру... При этом методе упаковка невозможна, да в общем-то в ней нет необходимости, т.к. сайз получается от 532 байт... Все инструменты и подробные мануалы с исходниками на эту тему я буду выкладывать в этом топике... Я очень надеюсь, что заинтересованные в этом вопросе будут... |
06.10.2007, 13:38 | #2 |
Редкий тунеядец
Форумчанин
Регистрация: 29.10.2006
Сообщений: 595
|
Вот исходники простейших пустых приложений написанных таким образом:
1 Метод Код:
Код:
Инструментарий по первому методу с исходниками и ВАТ-никами для компиляции вы найдёте тут: http://virusoff.pisem.su/WithoutRTL.rar Последний раз редактировалось execom; 06.10.2007 в 15:21. |
06.10.2007, 13:51 | #3 | |
Delphi/C++/C#
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,972
|
Цитата:
Ждём любых материалов. |
|
06.10.2007, 16:46 | #4 |
Владимир М.
Участник клуба
Регистрация: 30.10.2006
Сообщений: 1,289
|
может примеры исходников приложений, которые что-нить делают )
Берегите друг друга!
|
06.10.2007, 17:35 | #5 |
Редкий тунеядец
Форумчанин
Регистрация: 29.10.2006
Сообщений: 595
|
Примеры в блоге и в том архиве что я дал.. Это программа предназначена для добавление в буфер обмена содержимого командной строки... это может пригодится тем кто часто использует какую-то строку (например линки ftp, или пароли), что бы не копировать просто даблклик по ярлыку на прогу... В ярлыке надо будет в качестве командной строки указать то что нужно добавить в буфер, согласитесь нет смысла писать такую прогу весом 300кб?))) а так её размер получается 1300 первым методом и 1100 вторым:
1 метод Код:
|
06.10.2007, 17:42 | #6 |
Редкий тунеядец
Форумчанин
Регистрация: 29.10.2006
Сообщений: 595
|
Вот этот же пример но вторым способом:
Код:
|
08.10.2007, 11:56 | #7 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
Для фанатов делфи конечно супер, но в плане удобства - ужас, особенно импорт по именам типа _GetCommandLineA@0, я уж лучше чёта мелкое на FASM писать буду
пыщь
|
08.10.2007, 12:26 | #8 | |
Редкий тунеядец
Форумчанин
Регистрация: 29.10.2006
Сообщений: 595
|
Цитата:
|
|
08.10.2007, 12:59 | #9 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
"Стандартно" = от 1536 байт (data, code, import)
в одну секцию =1024 байт PE NATIVE вместо PE GUI (подправить subsystem=windows GUI в любом редакторе) = ~600 байт ручками = ~500 байт ручками извращенец = <500 байт
пыщь
|
08.10.2007, 13:31 | #10 |
Редкий тунеядец
Форумчанин
Регистрация: 29.10.2006
Сообщений: 595
|
а сдесь без извращений.. от 532 байт... Пишем не волшебными символами асм, а нормальный паскалем, а на перенос всего что нужно в проге и импорта занимает времени совсем не много... т.е. в общем-то пишем как в паскале токо без стринг.. а на выхлопе реальный результат...
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
С Делфи На Си++ | MAKEDON | Свободное общение | 3 | 22.07.2008 14:39 |
Из с++ в Делфи | Andre1723 | Общие вопросы Delphi | 4 | 02.06.2008 17:50 |
USB и Делфи | StartMis | Общие вопросы Delphi | 2 | 01.06.2008 14:22 |
не создается таблица в Interbase, вот кодинг... | Алёна | БД в Delphi | 3 | 19.02.2008 18:21 |