Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Песочница > Почему формат Win32-приложений в D2005/D2006 изм.


Автор: FlashSoft 3.1.2006, 06:48
Здравствуйте!

Чисто для любопытства интересует следующий вопрос.

Если в Delphi 2005/2006 (возможно и в Delphi 8 - не проверял) скомпилировать Win32-приложение (кстати, и для VisualStudio, начиная с 2003), то его невозможно сжать упаковщиками типа upx.

Вроде бы создается проект для платформы Win32, а не для .NET, а такая картошка получается. Где туплю?


Автор: Snowy 3.1.2006, 14:47
Попробуй так:
upx.exe -9 --force Project1.exe

Автор: Alexeis 3.1.2006, 15:03
ASPack жмет нормально и все работает.

Автор: FlashSoft 3.1.2006, 23:15
upx.exe -9 --force Project1.exe

Да, это upx пишет.
Спасибо за ответы. Просто было немного страшно smile , а вдруг программа не заработает на каком-нибудь компьютере.
Был такой глюк, когда распакованная программа не работала на 2000, а на XP Работала.
Исходный еxe работал и на двух, а распакованный отказался smile

Автор: Snowy 4.1.2006, 13:13
Цитата(FlashSoft @ 3.1.2006, 23:15 Найти цитируемый пост)

Да, это upx пишет.

Будем ждать новой версии. Может поправят анализатор.

Цитата(FlashSoft @ 3.1.2006, 23:15 Найти цитируемый пост)

Был такой глюк, когда распакованная программа не работала на 2000, а на XP Работала.

Это только методом тыка проверять.
Хотя лично такого ни разу не встречал.
Я вообще всегда сжимаю upx'ом, а потом расжимаю - после такой чистки файлы лучше раром пакуются.
Но с глюками еще не встречался.

Автор: Guedda 4.1.2006, 13:16
А, кстати, upx лучше, чем ASPack?

Автор: Snowy 4.1.2006, 13:50
Цитата(Guedda @ 4.1.2006, 13:16 Найти цитируемый пост)
А, кстати, upx лучше, чем ASPack?

Вопрос спорный. Когда как.
Но обычно UPX жмет сильнее.
Кроме того, стоит учитывать побочные эффекты, которые оценить сложно.
Лично я выбрал upx. На мой взгляд, более серъезная поделка.

Автор: Guedda 4.1.2006, 13:53
А, если можно, где можно почитать про побочные эффекты одного и другого?
Спасибо.

Автор: Snowy 4.1.2006, 20:01
Цитата(Guedda @ 4.1.2006, 13:53 Найти цитируемый пост)
А, если можно, где можно почитать про побочные эффекты одного и другого?

Сложный вопрос. Обычно вычисляется экспериментальным путум.
Можно спросить у upx методом
upx -help
Он покажет варианты ключей, что можно не сжимать. Обычно это и есть проблемы.
Также можно попробовать поиск по форуму по слову http://forum.vingrad.ru/index.php?act=Search&CODE=show&searchid=b86d52cc0a8405b7aca4f5ebb65a772f&search_in=posts&result_type=topics&flag=search&debug=&highlite=upx
Обычно проблем никаких, но есть и исключения.

Автор: FRAGNATIC 4.1.2006, 20:55
сжимать программы а особено длл ваще оч вредно оочч)
это нагружает систему)

Автор: Alex 5.1.2006, 00:30
Цитата(FRAGNATIC @ 4.1.2006, 20:55 Найти цитируемый пост)

сжимать программы а особено длл ваще оч вредно оочч)
это нагружает систему)

C этого места по подробней можно?

Что касается, что лучше upx или AsPack, то вопрос спорный, но об не корректной работе программ упакованных upx я слышал, да и сам сталкивался, а вот об не корректности упакованных AsPack нет. Сам долгое время паковал upx, но сейчас перешел на AsPack

Автор: FRAGNATIC 5.1.2006, 00:54
Код

C этого места по подробней можно?

красиво расписать не смогу всё
а перво источник в дауне( а так в кратце про длл
Цитата

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


Автор: Guedda 5.1.2006, 10:04
В общем... Мне так кажется, что вообще не нужны паковщики программ. А писать нужно на API, чтобы программы занимали меньше места.

Автор: Alexeis 5.1.2006, 11:39
Guedda так можно и до ассемблера дойти....
А вообще оружие надо выбирать соответственно врагу и универсального решения в этих вопросах нет smile

Автор: Snowy 5.1.2006, 12:12
Цитата(FRAGNATIC @ 4.1.2006, 20:55 Найти цитируемый пост)
сжимать программы а особено длл ваще оч вредно оочч)
это нагружает систему)

Тут я не согласен. Одно дело сжимать dll общего назначения, а совсем другое паковать ехе.
Паковать ехе ничем не вредно. Oсобенно писанные на VCL.

Автор: Alexeis 5.1.2006, 13:42
Цитата

Паковать ехе ничем не вредно

При быстрых процессорах это даже полезно smile
так как работа HDD гораздо медленнее чем с RAM и зачастую
распоковка в RAM происходит быстрее чем чтение с диска большого
файла. smile smile

Автор: _hunter 5.1.2006, 14:13
чтобы это ( тормоза ) заметить -- файл должен быть несколько сотен мегабайт
и ужаться он должен в несколько десятков мегабайт. что при правильном подходе к проектированию просто нереально: при сто-метровых exe-шниках стоит задуматься о разделении функциональности...
Добавлено @ 14:12
P.S.
exe-шники максимального размера, что на компе нашел:
nero.exe 19087360
WINWORD.EXE 12037688
причем ни первый ни второй не жмутся smile
Добавлено @ 14:13
P.P.S.
оба читаются меньше чем за секунду

Автор: Alexeis 5.1.2006, 14:39
Хорошо бы засечь время поточнее.... smile

Автор: _hunter 5.1.2006, 15:06
код такой:
Код

{
    double time = 0;

    DWORD begin = GetTickCount();

    if ( CopyFile("D:\\nero.exe", "NUL", FALSE) )
        time = ( GetTickCount() - begin ) / 1000.0;

    return 0;
}

перед запуском копировался файл на 700 метров ( для очистки кеша ) время 0.344 сек.

Автор: Alexeis 5.1.2006, 17:21
Я имел ввиду по точнее определить время запуска сжатого и не сжатого
exe, хотя nero не лучший пример так как грузит много библиотек.

Автор: _hunter 5.1.2006, 17:44
куда уж точнее ( там время зависит уже от особенностей строения программы )?
+ ты говорил о экономии времени за счет считывания меньшего числа байт с диска. эта экономия незначитильна ( доли секунды )

Автор: FRAGNATIC 5.1.2006, 17:47
alexeis1
да время разумеется у сдатого будет меньше совсем на незаметную какплю
хотябы потому что сжатый сначало распаковывается а потом запускается) вот и всё.
я говорил о забивании памяти)

Автор: Alex 6.1.2006, 01:12
FRAGNATIC, а теперь давайте по думаем сколько памяти мы там жрем пакуя стандартный exe размером в 1Мбайт при этом пользователю мы можем отдать этот не упакованный вариант, а наш конкурент с похожей программой его упакует и получит 300Кбайт. И мы оба выходим на рынок. И нтересно чей продукт купят? При этом этого 1 Мбайта в памяти ни кто не заметит. Упаковка exe значительно упрощает распостранение программ, при нынешних мощностях вычислительной техники заботиться об 1Мб памяти это просто смешно. У нас половина программ народ пишит когда при старте грузит в память все формы при этом программы в памяти занимают ужас сколько.

Итог: паковать нужно, но с умом, не нужно паковать все и вся.

PS:
По мне лучше при написании приложения следить, что бы оно память не ело как фиг знает что. (все чаще встречаю вроде бы не плохо организованные приложения, но память едят как фиг знает что)

Автор: FRAGNATIC 6.1.2006, 01:17
Alex
ну про ехе может я и не прав)
а вот про длл которые тоже очень любят поковать я думаю всёже их не стоит поковать=)

Автор: Poseidon 6.1.2006, 02:09
Цитата(FRAGNATIC @ 6.1.2006, 00:17 Найти цитируемый пост)

ну про ехе может я и не прав)
а вот про длл которые тоже очень любят поковать я думаю всёже их не стоит поковать=)
С чего бы это вдруг? dll по-сути - это тот же ехе, только без возможности запуска.

Автор: FlashSoft 6.1.2006, 02:53
Цитата

В общем... Мне так кажется, что вообще не нужны паковщики программ. А писать нужно на API, чтобы программы занимали меньше места.

Только паковщики не нужны, имхо. Файл можно сжать WinRAR, а еще лучше 7zip (для пересылки по почте, например).
А вот защищиать программы от просмотра разными редакторами ресурсов, отдалять процесс дизассемблирования, надо. А сделать это без упаковки программы очень сложно (хотя никто не отменял скрэмблирование и заинлайнивание всех функций в исходнике и др).
Вот такая ситуация.

А можно так.
Если в программном комплексе используется много exe, dll, то можно рантайм-библиотеки не линковать к файлам, а класть в текущий каталог с файлами или system32.
Тогда скорость должна немного возрасти, так как всеми файлами используются одни и те же библиотеки.

Автор: FRAGNATIC 6.1.2006, 02:59
Цитата

С чего бы это вдруг? dll по-сути - это тот же ехе, только без возможности запуска.

выше уже писал
по сути да
но длл препологает под собой один запуск а юзает её много приложений!

Автор: FRAGNATIC 6.1.2006, 04:45
Цитата(Alex @ 6.1.2006, 01:12 Найти цитируемый пост)

FRAGNATIC, а теперь давайте по думаем сколько памяти мы там жрем пакуя стандартный exe размером в 1Мбайт при этом пользователю мы можем отдать этот не упакованный вариант, а наш конкурент с похожей программой его упакует и получит 300Кбайт. И мы оба выходим на рынок. И нтересно чей продукт купят? При этом этого 1 Мбайта в памяти ни кто не заметит. Упаковка exe значительно упрощает распостранение программ, при нынешних мощностях вычислительной техники заботиться об 1Мб памяти это просто смешно. У нас половина программ народ пишит когда при старте грузит в память все формы при этом программы в памяти занимают ужас сколько.

ну вообщем-то а смысл поковать 2мб и преврать их в 1мб ? по мне так разницы не какой темболее если речь идёт о 20 мб которые мона в мегов 18 превратить.
размер критичен тока для вирусов и троянов а для нормальных приложений он имхо не важен))
насчёт покупателей то покупатель выберет то приложение которое лучше работает поэтому надо старатся чтобы твоё приложение было лучше чем у твоего конкуретна)
и мало кто ведётся на мелкий размер скорее даже я знаю многих которые подумалибы что за нах чё оно такое маленькое хорошоя прога не может быть такой мелкой и выбралибы 1мб =))))
а насчёт заботится об памяти имхо 1мб ни что но всёже когда можно всеголишь не упоковав приложение спасти его то это номано) а если все начнут поковать и так по одному мб......
а то что многие пишут приложения которые и так расходуют памяти немерено из-за кривости то это уже их роблемы.

Автор: Петрович 6.1.2006, 14:01
Это все безполезный спор из разряда "На вкус и цвет ..."

Что касается скорости, то это вопрос спорный, трудно поддающийся измерению. Думаю что разница в скорости загрузки конечно есть, но ее величина, особенно абсолютная, не настолько велика чтобы тратить время на ее определение. Единственное когда эта разница может быть существенной, так это при запуске программы с медленных носителей, таких как FDD и Flash-диски. Первые наверное уже врядли интересны, а вот вторые, как мне кажется, последнее время становятся более актуальными.

Что касается размера, то тут опять-же, все зависит от носителя. Конечно, при хранении программы на HDD, размер не имеет значения. Но, вот например у меня есть комерческая программа, которая после ужимания может работать с FDD. Причем, есть потребители которые ее так используют. Хотя конечно это скорее исключение чем правило.
Для Flash-дисков, размер опять же наверное не так существенен - их удельная стоимость снижается гиганскими темпами.
Ну и конечно размер может иметь значение при дистрибуции. Особенно если она осуществляется по интернету - широкополосный интернет пока еще доступен далеко не всем. smile

Что касается UPX | ASPack | .... Опять же вопрос личных пристрастий. Хотя, лично я отказался от использования UPX. Я уже когда-то писал что столкнулся с серьезной проблемой при его использовании. С тех пор пользую AsPack - пока (года 3) проблем не было и у меня, ни у моих клиентов.
Добавлено @ 14:01
Да, совсем забыл.
О занимаемой памяти ужатыми DLL. Конечно, как уже кто-то здесь писал, памяти такой процесс будет занимать больше. Но, не забывайте, речь идет о виртуальной памяти. Поэтому, использование реальной физической памяти опять же будет сильно зависить от постороения программы, алгоритмов ее работы, текущего режима использования, ...
Так что здесь тоже все не так просто и однозначно smile.

Автор: Guedda 10.1.2006, 17:06
Я думаю, если хорошо знаешь API, ассемблер не понадобится.

Автор: Akella 5.7.2006, 14:34
Цитата(Snowy @  3.1.2006,  14:47 Найти цитируемый пост)
Попробуй так:
upx.exe -9 --force Project1.ex

процесс сжатия идёт, но файл не сжимается

Добавлено @ 14:36 
Цитата(Snowy @  4.1.2006,  13:50 Найти цитируемый пост)
Цитата(Guedda @ 4.1.2006, 13:16 )    
А, кстати, upx лучше, чем ASPack?    

Вопрос спорный. Когда как.
Но обычно UPX жмет сильнее.

я сравнивал - у меня противоположный результат (проект на D7 был) 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)