UPX

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

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

UPX

Сообщение grigoreo » 22.09.2010 16:00:38

Уважаемые форумчане , есть чудная кросплатформенная утилитка upx для сжатия исполняемых файлов, далее есть функции в паскале ,в частности GetAppConfigFile есть такое свойство Application.ExeName и т.д.... Так вот вопрос почему все это счастье перестает работать после обработки исполняемого файла этой утилитой, получается она сжимать сжимает, а вот работу некоторых функций нарушает?
Аватара пользователя
grigoreo
постоялец
 
Сообщения: 195
Зарегистрирован: 10.03.2009 15:43:43
Откуда: С нашей Раши

Re: UPX

Сообщение Mr.Smart » 22.09.2010 17:08:46

В *nix системах распаковка производится во временный файл и после этого запускает программу.
Из этого следует, что все функции берущие данные из ParamStr будут работать неправильно :wink:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: UPX

Сообщение hinst » 23.09.2010 23:16:04

да. за безопасность приходится платить, что поделаешь.
:arrow: могу предложить как-нибудь глубоко системными апишками подменять это самое имя приложения. но система, скорее всего из тех же соображений безопасности, не даст вам поменять приложению его имя. к тому же UPX должен будет это делать
:arrow: вариант два: заменить все application.exeName на какую-нибудь переменную и получать её значение из командной строки. --ExeName=..
как-то так. алсо!: ведь только ParamStr(0) портится, остальные-то параметры перенаправляются UPX'ом как надо, наверное должнобыть...
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: UPX

Сообщение Mr.Smart » 23.09.2010 23:19:22

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

Какие вы имеете ввиду другие параметры? если имя программы поменялось и расположена она в каком нибудь Temp каталоге! тем более upx просто запускает данный файл после распаковки и не о какой распаковки в память не идёт и речи?
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: UPX

Сообщение dunin » 24.09.2010 08:51:47

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

Не знал. Спасибо. Тогда возникает вопрос "а нужен ли вообще UPX для никс систем?".
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: UPX

Сообщение alexs » 24.09.2010 20:22:25

UPX - зло!
дискет нет
а вот создаваемые им проблемы - есть!
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: UPX

Сообщение NXP » 24.09.2010 23:43:00

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

Его время прошло. Он давно никому не нужен.
Не тратьте время.
Аватара пользователя
NXP
постоялец
 
Сообщения: 187
Зарегистрирован: 02.01.2008 16:11:56
Откуда: Воронеж

Re: UPX

Сообщение Nik » 24.09.2010 23:47:32

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

Re: UPX

Сообщение alexs » 25.09.2010 04:50:08

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

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

Т.о. выгода от UPX мизерная, а вот лишние накладные расходы для операционки хороши.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: UPX

Сообщение Vadim » 25.09.2010 07:59:23

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

Зачем такие жертвы? Маленький, но очень добрый strip доводит lazarus.exe до вполне приёмлемого размера - 13 М... ;)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17

Рейтинг@Mail.ru