Там какие-либо оборотные стороны к использованию UPX для сжатия исполняемого файла Windows?

Попробуйте использовать одиночные кавычки '' вместо двойных кавычек.

sed -i 's:.*$ModLoad imudp.*:$ModLoad imudp:g' file

Это предотвращает особый смысл $ для расширения переменных.

Edit: ( в соответствии с комментарием @ tripleee )

Также выйдите $ для сопоставления буквенного знака доллара

sed -i 's:.*\$ModLoad imudp.*:$ModLoad imudp:g' file
36
задан Ferruccio 10 December 2008 в 04:15
поделиться

10 ответов

причина существуют оборотные стороны к использованию компрессоров EXE. Прежде всего:

После запуска сжатого EXE/DLL, весь код распаковывается от образа диска в память в одной передаче, которая может вызвать дисковую перегрузку, если система является низкой на памяти и вынуждена получить доступ к файлу подкачки. Напротив, с несжатым EXE/DLLs ОС выделяет память для кодовых страниц по требованию (т.е. когда они выполняются).

Несколько экземпляров сжатого EXE/DLL создают несколько экземпляров кода в памяти. Если у Вас есть сжатый EXE, который содержит 1 МБ кода (перед сжатием), и пользователь запускает 5 экземпляров его, приблизительно 4 МБ памяти потрачен впустую. Аналогично, если у Вас есть DLL, который составляет 1 МБ, и он используется 5 запущенными приложениями, приблизительно 4 МБ памяти потрачен впустую. С несжатым EXE/DLLs код только хранится в памяти однажды и совместно используется экземплярами.

http://www.jrsoftware.org/striprlc.php#execomp

45
ответ дан Lars Truijens 8 August 2019 в 15:43
поделиться

Заключительный размер исполняемого файла на диске в основном не важен в эти дни. Ваша программа может загрузить несколько миллисекунд быстрее, но как только она начинает работать, различие неразличимо.

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

4
ответ дан Greg Hewgill 8 August 2019 в 15:43
поделиться

Единственные вопросы размера времени во время загрузки от Интернета. При использовании UPX тогда, Вы на самом деле ухудшаетесь производительность, чем если бы Вы используете с 7 zip (на основе моего тестирования, С 7 zip, вдвое более хорошо, чем UPX). Тогда, когда это на самом деле оставляют сжатым на целевом компьютере, Ваша производительность уменьшена (см. ответ Lars). Таким образом, UPX не является хорошим решением для размера файла. Просто 7zip все это.

До для предотвращения вмешательства это СБОЙ также. Поддержки UPX, распаковывающие также. Если кто-то захочет изменить EXE тогда, то они будут видеть, что это - сжатие с UPX, и затем распакуйте его. Процент возможных взломщиков, которых Вы могли бы замедлить, не выравнивает по ширине потеря производительности и усилие.

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

10
ответ дан Krypton 8 August 2019 в 15:43
поделиться

Если Ваш единственный интерес находится в уменьшении размера исполняемых файлов, то Вы попытались сравнить размер исполняемого файла с и без пакетов во время выполнения? Предоставленный необходимо будет также включать размеры пакетов в целом наряду с исполняемым файлом, но если у Вас есть несколько исполняемых файлов, которые используют те же основные пакеты, тогда Ваши сбережения были бы довольно высоки.

Другой вещью посмотреть на была бы графика/глифы, которую Вы используете в своей программе. Можно оставить довольно мало свободного места путем консолидации их к единственному Timagelist, включенному в глобальный модуль данных, а не иметь их повторенный на каждой форме. Я полагаю, что каждое изображение хранится в ресурсе формы как шестнадцатеричное число, так, чтобы означал бы, что каждый байт поднимает два байта..., можно уменьшить это немного путем загрузки изображения из ресурса RCData с помощью TResourceStream.

2
ответ дан skamradt 8 August 2019 в 15:43
поделиться

Я полагаю, что существует возможность, что это не могло бы работать над компьютерами, которые имеют DEP (Предотвращение Выполнения Данных) включенный.

0
ответ дан Slapout 8 August 2019 в 15:43
поделиться

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

19
ответ дан Oliver Giesen 8 August 2019 в 15:43
поделиться

В прошлый раз, когда я пытался использовать его на управляемой сборке, это портило его настолько плохо, что время выполнения отказалось загружать его. Это - единственное время, я могу думать об этом, Вы не хотели бы использовать его (и, действительно, это было таким длинным, так как я попробовал это, что ситуация может даже быть лучше теперь). Я использовал его экстенсивно в прошлом на всех типах неуправляемых двоичных файлов, и никогда не имел проблему.

2
ответ дан TheSmurf 8 August 2019 в 15:43
поделиться

Существует три недостатка:

  1. целый код будет полностью несжатым в виртуальной памяти, в то время как в регулярном EXE или DLL, только код, на самом деле используемый, загружается в памяти. Это особенно релевантно, если только небольшая часть кода в Вашем EXE/DLL используется при каждом выполнении.
  2. , Если существует несколько экземпляров Вашего DLL и выполнения EXE, их код не может быть совместно использован через экземпляры, таким образом, Вы будете использовать больше памяти.
  3. , Если Ваш EXE/DLL уже находится в кэше, или на очень быстром носителе, или если ЦП Вы работаете, является медленным, Вы испытаете уменьшенную скорость запуска, поскольку распаковка должна будет все еще произойти, и Вы не извлечете выгоду из уменьшенного размера. Это особенно верно для EXE, который будет вызываться многократно неоднократно.

Таким образом вышеупомянутые недостатки являются большим количеством проблемы, если Ваш EXE или DLLs содержат много ресурсов, но иначе, они не могут быть большой частью фактора на практике, учитывая относительный размер исполняемых файлов и доступной памяти, если Вы не говорите о DLLs, используемом партиями исполняемых файлов (как система DLLs).

Для рассеивания некоторой неправильной информации в других ответах:

  • UPX не будет влиять на Вашу способность работать на защищенных от DEP машинах.
  • UPX не будет влиять на способность главного антивирусного программного обеспечения, поскольку они поддерживают UPX-сжатые исполняемые файлы (а также другие исполняемые форматы сжатия).
  • UPX смог использовать сжатие LZMA в течение некоторого времени теперь (7zip's алгоритм сжатия), используйте - lzma переключатель.
13
ответ дан user45336 8 August 2019 в 15:43
поделиться

Многие люди, похоже, игнорируют первоначальный вопрос «Различия между разработкой под UNIX и Windows» и так Я немного расскажу об этом.


Что касается изучения C #:

Я думаю, что в какой-то момент вам нужно выучить такой язык, как C # [1]. Вопрос не в том, стоит ли вам это изучать, а в том, когда и когда вы будете это изучать.


Относительно альтернативных языков, подобных C #:

Java - другой язык, очень похожий на C #. Java IMO является отцом C #, и IMO я предпочитаю Java.

Я предлагаю вам метафору, объясняющую мое пристрастие к Java. У Явы был этот сын C #, который видел все успехи своего отца. Сын ревновал и пытался сделать то же, что делал его отец.

В этом случае MS - выскочка, пытающаяся отодвинуть на задний план старшего отца. Однако выскочка C # упускает пару ключевых моментов IMO:

  • действительно кроссплатформенная
  • небольшая библиотека трюков с более коротким сроком службы C # (или, как мне нравится называть это меньшим набором предварительно собранных legos )
  • Я предпочитаю Java для вышеупомянутых двух пунктов.
  • У Явы был этот сын C #, который видел все успехи своего отца. Сын ревновал и пытался сделать то же, что делал его отец.

    В этом случае MS - выскочка, пытающаяся отодвинуть на задний план старшего отца. Однако выскочка C # упускает пару ключевых моментов IMO:

    • действительно кроссплатформенная
    • небольшая библиотека трюков с более коротким сроком службы C # (или, как мне нравится называть это меньшим набором предварительно собранных legos )
    • Я предпочитаю Java для вышеупомянутых двух пунктов.
    • У Явы был этот сын C #, который видел все успехи своего отца. Сын ревновал и пытался сделать то же, что делал его отец.

      В этом случае MS - выскочка, пытающаяся отодвинуть на задний план старшего отца. Однако выскочка C # упускает пару ключевых моментов IMO:

      • действительно кроссплатформенная
      • небольшая библиотека трюков с более коротким сроком службы C # (или, как мне нравится называть это меньшим набором предварительно собранных legos )
      • Я предпочитаю Java для вышеупомянутых двух пунктов.

      [1 - сноска] Когда я говорю «такой язык, как C #», я имею в виду тот факт, что существуют другие языки с аналогичными функциями. В частности, такие функции, как: сборка мусора, 100% объектно-ориентированный с самого начала (против взлома C ++ в ОО), встроенная документация по типу xml (например, javadoc) и гибкость для выполнения многих разных задач.


      Что касается обучения. NET:

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


      Вернуться к первоначальному вопросу " но причины изложены выше, в основном, память дороже, чем диск.

      Эрик: заглушка LZMA может быть больше. Даже если алгоритм лучше, он не всегда является чистым плюсом.

1
ответ дан 27 November 2019 в 04:16
поделиться

Сканеры вирусов, которые ищут «неизвестные» вирусы, могут отмечать сжатые исполняемые файлы UPX как имеющие вирусы. Мне сказали, что это потому, что несколько вирусов используют UPX, чтобы скрыть себя. Я использовал UPX в программном обеспечении, и McAfee помечает файл как вирус.

1
ответ дан 27 November 2019 в 04:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: