UPX

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
grigoreo
постоялец
Сообщения: 195
Зарегистрирован: 10.03.2009 14:43:43
Откуда: С нашей Раши

UPX

Сообщение grigoreo »

Уважаемые форумчане , есть чудная кросплатформенная утилитка upx для сжатия исполняемых файлов, далее есть функции в паскале ,в частности GetAppConfigFile есть такое свойство Application.ExeName и т.д.... Так вот вопрос почему все это счастье перестает работать после обработки исполняемого файла этой утилитой, получается она сжимать сжимает, а вот работу некоторых функций нарушает?
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

В *nix системах распаковка производится во временный файл и после этого запускает программу.
Из этого следует, что все функции берущие данные из ParamStr будут работать неправильно :wink:
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Сообщение hinst »

да. за безопасность приходится платить, что поделаешь.
:arrow: могу предложить как-нибудь глубоко системными апишками подменять это самое имя приложения. но система, скорее всего из тех же соображений безопасности, не даст вам поменять приложению его имя. к тому же UPX должен будет это делать
:arrow: вариант два: заменить все application.exeName на какую-нибудь переменную и получать её значение из командной строки. --ExeName=..
как-то так. алсо!: ведь только ParamStr(0) портится, остальные-то параметры перенаправляются UPX'ом как надо, наверное должнобыть...
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

hinst писал(а):ведь только ParamStr(0) портится, остальные-то параметры перенаправляются UPX'ом как надо, наверное должнобыть...

Какие вы имеете ввиду другие параметры? если имя программы поменялось и расположена она в каком нибудь Temp каталоге! тем более upx просто запускает данный файл после распаковки и не о какой распаковки в память не идёт и речи?
Аватара пользователя
dunin
энтузиаст
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и
Контактная информация:

Сообщение dunin »

Mr.Smart писал(а):В *nix системах распаковка производится во временный файл и после этого запускает программу.
...

Не знал. Спасибо. Тогда возникает вопрос "а нужен ли вообще UPX для никс систем?".
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

UPX - зло!
дискет нет
а вот создаваемые им проблемы - есть!
Аватара пользователя
NXP
постоялец
Сообщения: 187
Зарегистрирован: 02.01.2008 15:11:56
Откуда: Воронеж
Контактная информация:

Сообщение NXP »

dunin писал(а):Тогда возникает вопрос "а нужен ли вообще UPX для никс систем?".

Его время прошло. Он давно никому не нужен.
Не тратьте время.
Аватара пользователя
Nik
энтузиаст
Сообщения: 573
Зарегистрирован: 03.02.2006 23:08:09
Откуда: Киров
Контактная информация:

Сообщение Nik »

UPX иногда таки бывает нужен. Lazarus довольно большие исполнимые файлы клепает, а скорость чтения с винта до сих пор является "узким местом" в процессе запуска программы. Сжатие частично решает эту проблему - программы быстро считывается в память, а там распаковывается (этот процесс быстрее, чем чтение лишних мегабайт с диска). Хотя это критично только в случае реально больших исполнимых файлов (желающие могут поэкспериментировать со свежесобранным 120-метровым lazarus.exe :) ).
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Винда при запуске не читает файл в память - она делает финт ушами - мапит его как отображаемый в память. Т.е. чтение по требованию. И заодно - если нужна будет подкачка - то используется сам файл исполняемого модуля. Т.е. он как бы становится частью свап-файла - но только для чтения. Считается - что exe не меняется, поэтому когда память кончается, то физическая страница памяти, содержащая код программы очищается, а в указателях страниц ОС помечает, что когда эта страница понадобиться - то читать её из исходного исполняемого файла.

А вот UPX с его упаковкой всю эту систему рушит - и начинает задействоваться настоящий свап файл - т.е. при распаковке в память, если физически оперативка кончается - то все данные сливаются в свап настоящий, а потом оттуда подчитаются.
PS точно также винда ведёт себя со сменными носителями и сетевыми - т.е все что запускаестя с сети и сменых носителей предварительно затягиваются в память и свап файл.

Т.о. выгода от UPX мизерная, а вот лишние накладные расходы для операционки хороши.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Nik писал(а):желающие могут поэкспериментировать со свежесобранным 120-метровым lazarus.exe

Зачем такие жертвы? Маленький, но очень добрый strip доводит lazarus.exe до вполне приёмлемого размера - 13 М... ;)
Ответить