UPX
Модератор: Модераторы
UPX
Уважаемые форумчане , есть чудная кросплатформенная утилитка upx для сжатия исполняемых файлов, далее есть функции в паскале ,в частности GetAppConfigFile есть такое свойство Application.ExeName и т.д.... Так вот вопрос почему все это счастье перестает работать после обработки исполняемого файла этой утилитой, получается она сжимать сжимает, а вот работу некоторых функций нарушает?
В *nix системах распаковка производится во временный файл и после этого запускает программу.
Из этого следует, что все функции берущие данные из ParamStr будут работать неправильно
Из этого следует, что все функции берущие данные из ParamStr будут работать неправильно
да. за безопасность приходится платить, что поделаешь.
могу предложить как-нибудь глубоко системными апишками подменять это самое имя приложения. но система, скорее всего из тех же соображений безопасности, не даст вам поменять приложению его имя. к тому же UPX должен будет это делать
вариант два: заменить все application.exeName на какую-нибудь переменную и получать её значение из командной строки. --ExeName=..
как-то так. алсо!: ведь только ParamStr(0) портится, остальные-то параметры перенаправляются UPX'ом как надо, наверное должнобыть...
как-то так. алсо!: ведь только ParamStr(0) портится, остальные-то параметры перенаправляются UPX'ом как надо, наверное должнобыть...
hinst писал(а):ведь только ParamStr(0) портится, остальные-то параметры перенаправляются UPX'ом как надо, наверное должнобыть...
Какие вы имеете ввиду другие параметры? если имя программы поменялось и расположена она в каком нибудь Temp каталоге! тем более upx просто запускает данный файл после распаковки и не о какой распаковки в память не идёт и речи?
- dunin
- энтузиаст
- Сообщения: 634
- Зарегистрирован: 02.05.2007 13:18:11
- Откуда: Тољя††и
- Контактная информация:
Mr.Smart писал(а):В *nix системах распаковка производится во временный файл и после этого запускает программу.
...
Не знал. Спасибо. Тогда возникает вопрос "а нужен ли вообще UPX для никс систем?".
- Nik
- энтузиаст
- Сообщения: 573
- Зарегистрирован: 03.02.2006 23:08:09
- Откуда: Киров
- Контактная информация:
UPX иногда таки бывает нужен. Lazarus довольно большие исполнимые файлы клепает, а скорость чтения с винта до сих пор является "узким местом" в процессе запуска программы. Сжатие частично решает эту проблему - программы быстро считывается в память, а там распаковывается (этот процесс быстрее, чем чтение лишних мегабайт с диска). Хотя это критично только в случае реально больших исполнимых файлов (желающие могут поэкспериментировать со свежесобранным 120-метровым lazarus.exe
).
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Винда при запуске не читает файл в память - она делает финт ушами - мапит его как отображаемый в память. Т.е. чтение по требованию. И заодно - если нужна будет подкачка - то используется сам файл исполняемого модуля. Т.е. он как бы становится частью свап-файла - но только для чтения. Считается - что exe не меняется, поэтому когда память кончается, то физическая страница памяти, содержащая код программы очищается, а в указателях страниц ОС помечает, что когда эта страница понадобиться - то читать её из исходного исполняемого файла.
А вот UPX с его упаковкой всю эту систему рушит - и начинает задействоваться настоящий свап файл - т.е. при распаковке в память, если физически оперативка кончается - то все данные сливаются в свап настоящий, а потом оттуда подчитаются.
PS точно также винда ведёт себя со сменными носителями и сетевыми - т.е все что запускаестя с сети и сменых носителей предварительно затягиваются в память и свап файл.
Т.о. выгода от UPX мизерная, а вот лишние накладные расходы для операционки хороши.
А вот UPX с его упаковкой всю эту систему рушит - и начинает задействоваться настоящий свап файл - т.е. при распаковке в память, если физически оперативка кончается - то все данные сливаются в свап настоящий, а потом оттуда подчитаются.
PS точно также винда ведёт себя со сменными носителями и сетевыми - т.е все что запускаестя с сети и сменых носителей предварительно затягиваются в память и свап файл.
Т.о. выгода от UPX мизерная, а вот лишние накладные расходы для операционки хороши.
Nik писал(а):желающие могут поэкспериментировать со свежесобранным 120-метровым lazarus.exe
Зачем такие жертвы? Маленький, но очень добрый strip доводит lazarus.exe до вполне приёмлемого размера - 13 М...
