To jest polecenie upx-ucl, które można uruchomić w darmowym dostawcy usług hostingowych OnWorks przy użyciu jednej z wielu naszych bezpłatnych stacji roboczych online, takich jak Ubuntu Online, Fedora Online, emulator online systemu Windows lub emulator online MAC OS
PROGRAM:
IMIĘ
upx - kompresuj lub rozszerzaj pliki wykonywalne
STRESZCZENIE
upx [ komenda ] [ Opcje ] filename...
ABSTRACT
Najlepszy program do pakowania plików wykonywalnych
Prawa autorskie (c) 1996-2013 Markus Oberhumer, Laszlo Molnar & John Reiser
http://upx.sourceforge.net
UPX to przenośny, rozszerzalny, wykonywalny program pakujący o wysokiej wydajności dla kilku różnych
formaty wykonywalne. Osiąga doskonały współczynnik kompresji i oferuje *bardzo* szybki
dekompresja. Twoje pliki wykonywalne nie mają narzutu pamięci ani innych wad w większości
obsługiwanych formatów ze względu na dekompresję w miejscu.
Podczas gdy możesz używać UPX swobodnie zarówno dla niekomercyjnych, jak i komercyjnych plików wykonywalnych (np
szczegóły patrz plik /usr/share/doc/upx-ucl/copyright), bylibyśmy bardzo wdzięczni, gdybyś
kredyt UPX i nas samych w dokumentacji, być może zawierającej odniesienie do UPX
strona główna. Dzięki.
[ Za pomocą UPX w aplikacjach innych niż OpenSource bez odpowiednich kredytów uważa się za nie
politycznie poprawny ;-) ]
OŚWIADCZENIE
UPX pochodzi z ABSOLUTNIE ŻADNEJ GWARANCJI; szczegóły w pliku
/usr/share/doc/upx-ucl/prawa autorskie.
Jest to pierwsze wydanie w jakości produkcyjnej i planujemy, że przyszłe wydania 1.xx będą
być wstecznie kompatybilny z tą wersją.
Wszelkie problemy lub sugestie prosimy zgłaszać autorom. Dzięki.
OPIS
UPX to wszechstronny wykonywalny program pakujący z następującymi funkcjami:
- doskonały współczynnik kompresji: kompresuje lepiej niż zip/gzip,
użyj UPX, aby zmniejszyć rozmiar swojej dystrybucji!
- bardzo szybka dekompresja: około 10 MiB/s na starym Pentium 133,
około 200 MiB/s na Athlonie XP 2000+.
- brak narzutu pamięci dla skompresowanych plików wykonywalnych dla większości
obsługiwane formaty
- bezpieczny: możesz wyświetlać, testować i rozpakowywać swoje pliki wykonywalne
Ponadto suma kontrolna zarówno skompresowanego, jak i nieskompresowanego pliku to
utrzymywane wewnętrznie.
- uniwersalny: UPX może spakować wiele formatów wykonywalnych:
* atari/tos
* bvmlinuz/386 [bootowalne jądro Linuksa]
* djgpp2/kawa
* dos/com
*ds/exe
* dos/sys
* Linux/386
* Linux/elf386
*linux/sh386
*ps1/exe
* rtm32/pe
* tmt/adam
* vmlinuz/386 [bootowalne jądro Linuksa]
* vmlinux/386
* watcom/le (obsługuje DOS4G, PMODE/W, DOS32a i CauseWay)
* win32/pe (exe i dll)
* arm/pe (exe i dll)
* linux/elfamd64
* linux/elfppc32
* mach/elfppc32
- przenośny: UPX jest napisany w przenośnym C++ neutralnym dla endianów
- rozszerzalny: ze względu na układ klas jest bardzo łatwy w obsłudze
nowe formaty plików wykonywalnych lub dodać nowe algorytmy kompresji
- bezpłatny: UPX może być swobodnie dystrybuowany i używany. A od wersji 0.99
pełny kod źródłowy UPX jest udostępniany na licencji GNU General Public
Licencja (GPL)!
Prawdopodobnie rozumiesz teraz, dlaczego dzwonimy UPX "ostateczny„paker plików wykonywalnych.
POLECENIA
Kompresować
Jest to domyślna operacja, np. upx twój plik.exe skompresuje plik określony w
wiersz poleceń.
Rozprężać
Wszystkie produkty UPX Obsługiwane formaty plików można rozpakować za pomocą -d przełączać np. upx -d
twój plik.exe rozpakuje właśnie skompresowany plik.
Testowanie
Kurs -t Polecenie sprawdza integralność skompresowanych i nieskompresowanych danych, np. upx -t
twój plik.exe sprawdź, czy plik można bezpiecznie zdekompresować. Zauważ, że to polecenie
nie sprawdza całego pliku, tylko część, która zostanie rozpakowana podczas programu
wykonanie. Oznacza to, że nie powinieneś używać tego polecenia zamiast sprawdzania wirusów.
Lista
Kurs -l polecenie drukuje niektóre informacje o skompresowanych plikach określonych w pliku
wiersz poleceń jako parametry, np upx -l twój plik.exe pokazuje skompresowany / nieskompresowany
rozmiar i stopień kompresji twój plik.exe.
OPCJE
-q: bądź cicho, stłumij ostrzeżenia
-q -q (lub -qq): bądź bardzo cichy, tłumij błędy
-q -q -q (lub -qqq): nie produkują w ogóle żadnego wyjścia
--help: drukuje pomoc
--wersja: wydrukować wersję UPX
--dokładny: podczas kompresji wymagaj, aby móc później uzyskać plik identyczny z bajtem
dekompresja z opcją -d. [UWAGA: to jest w toku i nie jest obsługiwane dla wszystkich
jeszcze formaty. Jeśli ci zależy, jako obejście możesz skompresować, a następnie zdekompresować plik
zaprogramuj po raz pierwszy - wszelkie dalsze kroki kompresji-dekompresji powinny następnie dać bajt-
identyczne wyniki w porównaniu z pierwszą wersją zdekompresowaną.]
[ ...do zapisania... - wpisz `upx --help' Na razie ]
COMPRESSION POZIOMY & TUNING
UPX oferuje dziesięć różnych poziomów kompresji od -1 do -9, --Najlepsza. Domyślny
poziom kompresji to -8 dla plików mniejszych niż 512 KiB i -7 Inaczej.
· Poziomy kompresji 1, 2 i 3 są dość szybkie.
· Poziomy kompresji 4, 5 i 6 zapewniają dobry stosunek czasu do wydajności.
· Poziomy kompresji 7, 8 i 9 faworyzują stopień kompresji nad szybkością.
· Poziom kompresji --Najlepsza może zająć dużo czasu.
Zwróć uwagę na ten poziom kompresji --Najlepsza może być nieco powolny w przypadku dużych plików, ale ty
zdecydowanie powinieneś go użyć przy wypuszczaniu ostatecznej wersji swojego programu.
Szybka informacja o uzyskaniu najlepszego współczynnika kompresji:
· Próbować upx --bydlę mój plik.exe lub nawet upx --bardzo brutalny mój plik.exe.
· Spróbuj, jeśli --nakładka=pasek działa.
· Dla programów win32/pe jest --strip-relocs=0. Patrz uwagi poniżej.
WAGI OBSŁUGA OPCJE
Info: „Nakładka” oznacza dane pomocnicze dołączane po logicznym końcu pliku wykonywalnego,
i często zawiera dane specyficzne dla aplikacji (jest to powszechna praktyka, aby uniknąć
dodatkowy plik danych, chociaż lepiej byłoby użyć sekcji zasobów).
UPX obsługuje nakładki, tak jak robi to wiele innych wykonywalnych programów pakujących: po prostu kopiuje nakładkę
po skompresowanym obrazie. Działa to z niektórymi plikami, ale nie działa z innymi,
w zależności od tego, w jaki sposób aplikacja faktycznie uzyskuje dostęp do tych nałożonych danych.
--overlay=copy Skopiuj wszelkie dodatkowe dane dołączone do pliku. [DOMYŚLNY]
--overlay=strip Usuń dowolną nakładkę z programu zamiast
kopiowanie tego. Uważaj, może to spowodować skompresowanie
awaria programu lub w inny sposób bezużyteczny.
--overlay=pomiń Odmawia kompresji programów, które mają nakładkę.
ŚRODOWISKO
Zmienna środowiskowa UPX może przechowywać zestaw domyślnych opcji dla UPX. Te opcje są
interpretowane jako pierwsze i mogą być nadpisywane przez jawne parametry wiersza poleceń. Dla
przykład:
dla DOS/Windows: ustaw UPX=-9 --compress-icons#0
dla sh/ksh/zsh: UPX="-9 --compress-icons=0"; wyeksportować UPX
dla csh/tcsh: setenv UPX "-9 --compress-icons=0"
W systemie DOS/Windows musisz użyć „#” zamiast „=” podczas ustawiania zmiennej środowiskowej
z powodu ograniczenia COMMAND.COM.
Nie wszystkie opcje są prawidłowe w zmiennej środowiskowej - UPX powiem Ci.
Możesz jawnie użyć --nie-środ opcję ignorowania zmiennej środowiskowej.
UWAGI DLA THE UTRZYMANY WYKONYWALNY FORMATY
UWAGI DLA ATARI/TOS
Jest to format wykonywalny używany przez Atari ST/TT, osobiste urządzenie oparte na Motoroli 68000
komputer, który był popularny pod koniec lat 80. Wsparcie tego formatu wynika tylko z
nostalgicznych uczuć jednego z autorów i nie służy żadnemu celowi praktycznemu :-). Widzieć
http://www.freemint.de więcej informacji.
Spakowane programy będą bajtowo identyczne z oryginałem po dekompresji. Wszystkie debugowanie
informacje zostaną jednak usunięte.
Dodatkowe opcje dostępne dla tego formatu wykonywalnego:
--all-methods Kompresuje program kilka razy, używając all
dostępne metody kompresji. To może się poprawić
współczynnik kompresji w niektórych przypadkach, ale zwykle
metoda domyślna i tak daje najlepsze rezultaty.
UWAGI DLA BVMLINUZ/I386
Tak samo jak vmlinuz/i386.
UWAGI DLA DOS/COM
Oczywiście UPX nie będzie działać z plikami wykonywalnymi, które chcą odczytywać dane od siebie (np
niektóre narzędzia wiersza poleceń dostarczane z Win95/98/ME).
Skompresowane programy działają tylko na 286+.
Spakowane programy będą bajtowo identyczne z oryginałem po dekompresji.
Maksymalny rozmiar po nieskompresowaniu: ~65100 bajtów.
Dodatkowe opcje dostępne dla tego formatu wykonywalnego:
--8086 Utwórz plik wykonywalny, który działa na dowolnym procesorze 8086.
--all-methods Kompresuje program kilka razy, używając all
dostępne metody kompresji. To może się poprawić
współczynnik kompresji w niektórych przypadkach, ale zwykle
metoda domyślna i tak daje najlepsze rezultaty.
--all-filters Kompresuje program kilka razy, używając all
dostępne filtry przetwarzania wstępnego. To może się poprawić
współczynnik kompresji w niektórych przypadkach, ale zwykle
filtr domyślny i tak daje najlepsze wyniki.
UWAGI DLA DOS/EXE
dos/exe oznacza wszystkie „normalne” 16-bitowe pliki wykonywalne DOS.
Oczywiście UPX nie będzie działać z plikami wykonywalnymi, które chcą odczytywać dane od siebie (np
niektóre narzędzia wiersza poleceń dostarczane z Win95/98/ME).
Skompresowane programy działają tylko na 286+.
Dodatkowe opcje dostępne dla tego formatu wykonywalnego:
--8086 Utwórz plik wykonywalny, który działa na dowolnym procesorze 8086.
--no-reloc Nie używa żadnych rekordów relokacji w nagłówku exe.
--all-methods Kompresuje program kilka razy, używając all
dostępne metody kompresji. To może się poprawić
współczynnik kompresji w niektórych przypadkach, ale zwykle
metoda domyślna i tak daje najlepsze rezultaty.
UWAGI DLA DOS/SYS
Skompresowane programy działają tylko na 286+.
Spakowane programy będą bajtowo identyczne z oryginałem po dekompresji.
Maksymalny rozmiar po nieskompresowaniu: ~65350 bajtów.
Dodatkowe opcje dostępne dla tego formatu wykonywalnego:
--8086 Utwórz plik wykonywalny, który działa na dowolnym procesorze 8086.
--all-methods Kompresuje program kilka razy, używając all
dostępne metody kompresji. To może się poprawić
współczynnik kompresji w niektórych przypadkach, ale zwykle
metoda domyślna i tak daje najlepsze rezultaty.
--all-filters Kompresuje program kilka razy, używając all
dostępne filtry przetwarzania wstępnego. To może się poprawić
współczynnik kompresji w niektórych przypadkach, ale zwykle
filtr domyślny i tak daje najlepsze wyniki.
UWAGI DLA DJGPP2/COFF
Przede wszystkim zaleca się stosowanie UPX *zamiast rozebrać się. strip ma bardzo złe
nawyk zastępowania kodu pośredniczącego własną (przestarzałą) wersją. Dodatkowo UPX koryguje
błąd/funkcja w pasku v2.8.x: naprawi wyrównanie 4 KiB kodu pośredniczącego.
UPX zawiera pełną funkcjonalność stubify. Oznacza to, że automatycznie otępi
Twoje pliki COFF. Skorzystaj z opcji --kawa aby wyłączyć tę funkcję (patrz poniżej).
UPX automatycznie obsługuje paczki Allegro.
Format DLM (raczej egzotyczne rozszerzenie biblioteki współdzielonej) nie jest obsługiwany.
Spakowane programy będą bajtowo identyczne z oryginałem po dekompresji. Wszystkie debugowanie
informacje i pozostałe śmieci zostaną jednak usunięte.
Dodatkowe opcje dostępne dla tego formatu wykonywalnego:
--coff Tworzy wyjście COFF zamiast EXE. Domyślnie
UPX zachowuje twój bieżący kod pośredniczący.
--all-methods Kompresuje program kilka razy, używając all
dostępne metody kompresji. To może się poprawić
współczynnik kompresji w niektórych przypadkach, ale zwykle
metoda domyślna i tak daje najlepsze rezultaty.
--all-filters Kompresuje program kilka razy, używając all
dostępne filtry przetwarzania wstępnego. To może się poprawić
współczynnik kompresji w niektórych przypadkach, ale zwykle
filtr domyślny i tak daje najlepsze wyniki.
UWAGI DLA LINUX [ogólny]
Wprowadzenie
Obsługa Linux/386 w UPX składa się z 3 różnych formatów wykonywalnych,
jeden zoptymalizowany pod kątem plików wykonywalnych ELF („linux/elf386”), jeden zoptymalizowany
dla skryptów powłoki („linux/sh386”) i jeden ogólny format
("linux/386").
Zaczniemy najpierw od ogólnej dyskusji, ale proszę
przeczytaj także odpowiednie dokumenty dla każdego z poszczególnych formatów.
Istnieje również specjalna obsługa jąder rozruchowych — patrz
opis formatu vmlinuz/386.
Ogólny przegląd użytkownika
Uruchomienie skompresowanego programu wykonywalnego zajmuje mniej miejsca na dysku
``stały'' nośnik pamięci (taki jak dysk twardy, dyskietka,
CD-ROM, pamięć flash, EPROM itp.), aby uzyskać więcej miejsca w jednym lub kilku
``tymczasowe'' nośniki pamięci (takie jak RAM, przestrzeń wymiany, / TmpItp.).
Uruchomienie skompresowanego pliku wykonywalnego również wymaga dodatkowego procesora
cykle do generowania skompresowanego pliku wykonywalnego w pierwszej kolejności,
i dekompresować go przy każdym wywołaniu.
Ile miejsca jest przedmiotem obrotu? To zależy od pliku wykonywalnego, ale wielu
programy oszczędzają od 30% do 50% stałego miejsca na dysku. Ile procesora
narzut jest tam? Ponownie, zależy to od pliku wykonywalnego, ale
prędkość dekompresji wynosi na ogół co najmniej wiele megabajtów na sekundę,
i często jest ograniczona szybkością dysku bazowego
lub we/wy sieciowe.
W zależności od statystyk użytkowania i dostępu oraz względnej
prędkości procesora, pamięci RAM, przestrzeni wymiany, / Tmp, a następnie pamięć systemu plików
wywoływanie i uruchamianie skompresowanego pliku wykonywalnego może być szybsze niż
bezpośrednio uruchamiając odpowiedni nieskompresowany program.
System operacyjny może wykonywać mniej kosztownych operacji we/wy
wywołać skompresowany program. Stronicowanie do lub z przestrzeni wymiany
or / Tmp może być szybsze niż stronicowanie z ogólnego systemu plików.
Programy ``Średniej wielkości'', które mają dostęp do około 1/3 do 1/2 ich
przechowywane bajty programu mogą szczególnie dobrze radzić sobie z kompresją.
Małe programy zwykle nie przynoszą tak dużych korzyści, ponieważ są bezwzględne
oszczędności są mniejsze. Duże programy zwykle nie przynoszą proporcjonalnych korzyści
ponieważ każde wywołanie może wykorzystać tylko niewielką część programu,
jednak UPX dekompresuje cały program przed jego wywołaniem.
Jednak w środowiskach, w których ilość miejsca na dysku lub w pamięci flash jest ograniczona,
wtedy kompresja i tak może wygrać.
Obecnie pliki wykonywalne skompresowane przez UPX nie współdzielą pamięci RAM w czasie wykonywania
w sposób, w jaki robią to pliki wykonywalne odwzorowane z systemu plików. Jak
wynik, jeśli ten sam program jest uruchamiany jednocześnie przez więcej niż jeden
proces, użycie skompresowanej wersji będzie wymagało więcej pamięci RAM i/lub
zamień miejsce. Tak więc programy powłoki (bash, csh itp.) i ``make''
mogą nie być dobrymi kandydatami do kompresji.
UPX rozpoznaje trzy formaty plików wykonywalnych dla systemu Linux: Linux/elf386,
Linux/sh386 i Linux/386. Linux/386 to najbardziej ogólny format;
mieści dowolny plik, który można wykonać. W czasie wykonywania plik UPX
kod dekompresyjny odtwarza się w / Tmp kopia oryginalnego pliku,
a następnie kopia jest (ponownie) wykonywana z tymi samymi argumentami.
Binarne pliki wykonywalne ELF domyślnie preferują format Linux/elf386,
ponieważ UPX dekompresuje je bezpośrednio do pamięci RAM, używa tylko jednego
exec, nie używa spacji w / Tmpi nie używa /proc.
Skrypty powłoki, w których podstawowa powłoka akceptuje argument ``-c''
może używać formatu Linux/sh386. UPX dekompresuje skrypt powłoki
do niskiej pamięci, następnie odwzorowuje powłokę i przekazuje cały tekst pliku
script jako argument z wiodącym ``-c''.
Korzyści ogólne:
- UPX może kompresować wszystkie pliki wykonywalne, czy to AOUT, ELF, libc4, libc5,
libc6, skrypty Shell/Perl/Python/..., samodzielna klasa Java
binarne, czy cokolwiek...
Wszystkie skrypty i programy będą działać tak jak wcześniej.
- Skompresowane programy są całkowicie samowystarczalne. Nie ma potrzeby
dowolny program zewnętrzny.
- UPX utrzymuje Twój oryginalny program w nienaruszonym stanie. To znaczy że
po dekompresji będziesz miał wersję identyczną bajtem,
i możesz używać UPX jako kompresora plików, tak jak gzip.
[Zauważ, że UPX przechowuje wewnętrznie sumę kontrolną pliku,
więc jest to rzeczywiście niezawodna alternatywa. ]
- Ponieważ kod pośredniczący używa tylko wywołań systemowych i nie jest połączony z biblioteką libc
powinien działać w dowolnej konfiguracji Linuksa, w której można uruchomić ELF
pliki binarne.
- Z tego samego powodu skompresowane pliki wykonywalne powinny działać pod
FreeBSD i inne systemy, które mogą uruchamiać pliki binarne Linuksa.
[Prosimy o przesłanie opinii na ten temat]
Ogólne wady:
- Nie zaleca się kompresowania programów, które zazwyczaj mają ich wiele
uruchomione instancje (jak `sh' lub `make'), ponieważ wspólne segmenty
skompresowane programy nie będą już udostępniane innym
procesów.
- `ldd' i `size' nie pokażą niczego użytecznego, ponieważ wszystkie one
see jest kodem pośredniczącym połączonym statycznie. Od wersji 0.82 sekcja
nagłówki są usuwane z kodu pośredniczącego UPX, a „rozmiar” się nie zgadza
rozpoznać format pliku. Plik patches/patch-elfcode.h ma rozszerzenie
patch, aby naprawić ten błąd w `size' i innych programach, które używają GNU BFD.
Ogólne notatki:
- Ponieważ UPX pozostawia twój oryginalny program nietknięty, jest to korzystne
rozebrać go przed kompresją.
- Jeśli skompresujesz skrypt, stracisz niezależność od platformy -
może to stanowić problem, jeśli używasz dysków montowanych przez NFS.
- Kompresja programów suid, guid i sticky-bit jest odrzucana
ze względu na możliwe implikacje dla bezpieczeństwa.
- Z tego samego powodu nie ma sensu robić żadnej kompresji
program sud.
- Oczywiście UPX nie będzie działać z plikami wykonywalnymi, które chcą odczytywać dane
od siebie. Np. może to stanowić problem dla skryptów Perla
które uzyskują dostęp do swoich linii __DATA__.
- W przypadku błędów wewnętrznych kod pośredni zostanie przerwany z kodem wyjścia 127.
Typowe powody, dla których tak się dzieje, to to, że program w jakiś sposób
zmodyfikowany po kompresji.
Uruchomienie `strace -o strace.log skompresowany_plik' powie ci więcej.
UWAGI DLA LINUX/ELF386
Najpierw przeczytaj ogólny opis Linuksa.
Format linux/elf386 dekompresuje bezpośrednio do pamięci RAM, używa tylko jednego exec, nie używa
przestrzeń w / Tmpi nie używa /proc.
Linux/elf386 jest automatycznie wybierany dla plików wykonywalnych Linux ELF.
Spakowane programy będą bajtowo identyczne z oryginałem po dekompresji.
Jak to działa:
W przypadku plików wykonywalnych ELF UPX dekompresuje bezpośrednio do pamięci, symulując
mapowanie używane przez jądro systemu operacyjnego podczas exec(),
w tym interpreter programu PT_INTERP (jeśli istnieje).
Funkcja brk() jest ustawiana przez specjalny segment PT_LOAD w skompresowanym pliku
sam plik wykonywalny. Następnie UPX czyści stos z wyjątkiem
argumenty, zmienne środowiskowe i wpisy Elf_auxv (to jest
wymagane przez błędy w kodzie startowym /lib/ld-linux.so od dnia
maj 2000) i przekazuje kontrolę do interpretera programu lub
adres e_entry oryginalnego pliku wykonywalnego.
Kod pośredniczący UPX ma około 1700 bajtów i jest częściowo napisany w asemblerze
i używa tylko wywołań systemowych jądra. Nie jest powiązany z żadną biblioteką libc.
Konkretne wady:
- W przypadku formatów linux/elf386 i linux/sh386 będziesz polegać
Pamięć RAM i przestrzeń wymiany do przechowywania całego zdekompresowanego programu
żywotność procesu. Jeśli używasz już większości swojej wymiany
miejsca, może ci zabraknąć. System, w którym „brakuje pamięci”
może stać się kruchy. Wiele programów nie reaguje z wdziękiem, gdy
malloc() zwraca 0. W nowszych jądrach Linuksa kernel
może zdecydować się na zabicie niektórych procesów, aby odzyskać pamięć, a ty
może nie podobać się wybór jądra do zabicia. Działanie
/usr/bin/top jest jednym ze sposobów sprawdzenia użycia przestrzeni wymiany.
Dodatkowe opcje dostępne dla tego formatu wykonywalnego:
(None)
UWAGI DLA LINUX/SH386
Najpierw przeczytaj ogólny opis Linuksa.
Skrypty powłoki, w których podrzędna powłoka akceptuje argument ``-c'' mogą używać Linuksa/sh386
Format. UPX dekompresuje skrypt powłoki do małej ilości pamięci, następnie odwzorowuje powłokę i przechodzi
cały tekst skryptu jako argument z wiodącym ``-c''. Nie wykorzystuje przestrzeni
in / Tmpi nie używa /proc.
Linux/sh386 jest automatycznie wybierany dla skryptów powłoki, które używają znanej powłoki.
Spakowane programy będą bajtowo identyczne z oryginałem po dekompresji.
Jak to działa:
Dla plików wykonywalnych skryptów powłoki (plików zaczynających się od „#!/” lub „#! /”)
gdzie wiadomo, że powłoka akceptuje „-c ", UPX dekompresuje
plik do małej pamięci, a następnie mapuje powłokę (i jej PT_INTERP),
i przekazuje kontrolę do powłoki z całym rozpakowanym plikiem
jako argument po „-c”. Znane powłoki to sh, ash, bash, bsh, csh,
ksh, tcsh, pdksh. Ograniczenie: UPX nie może używać tej metody
dla skryptów powłoki, które używają jednego opcjonalnego argumentu łańcuchowego po
nazwę powłoki w skrypcie (przykład: „#! / Bin / sh opcja3\n".)
Kod pośredniczący UPX ma około 1700 bajtów i jest częściowo napisany w asemblerze
i używa tylko wywołań systemowych jądra. Nie jest powiązany z żadną biblioteką libc.
Konkretne wady:
- W przypadku formatów linux/elf386 i linux/sh386 będziesz polegać
Pamięć RAM i przestrzeń wymiany do przechowywania całego zdekompresowanego programu
żywotność procesu. Jeśli używasz już większości swojej wymiany
miejsca, może ci zabraknąć. System, w którym „brakuje pamięci”
może stać się kruchy. Wiele programów nie reaguje z wdziękiem, gdy
malloc() zwraca 0. W nowszych jądrach Linuksa kernel
może zdecydować się na zabicie niektórych procesów, aby odzyskać pamięć, a ty
może nie podobać się wybór jądra do zabicia. Działanie
/usr/bin/top jest jednym ze sposobów sprawdzenia użycia przestrzeni wymiany.
Dodatkowe opcje dostępne dla tego formatu wykonywalnego:
(None)
UWAGI DLA LINUX/386
Najpierw przeczytaj ogólny opis Linuksa.
Ogólny format linux/386 dekompresuje do / Tmp i potrzeb / proc obsługa systemu plików. To
uruchamia zdekompresowany program przez kierownik() wywołanie systemowe.
Linux/386 jest wybierany tylko wtedy, gdy wyspecjalizowane linux/elf386 i linux/sh386 nie rozpoznają
plik.
Spakowane programy będą bajtowo identyczne z oryginałem po dekompresji.
Jak to działa:
W przypadku plików, które nie są ELF i nie są skryptem dla znanej powłoki „-c”,
UPX używa jądra execve(), które najpierw wymaga dekompresji do pliku a
plik tymczasowy w systemie plików. Co ciekawe -
ze względu na dobre zarządzanie pamięcią jądra Linuksa - to
często nie wprowadza zauważalnego opóźnienia, a właściwie jest
nie będzie w ogóle dostępu do dysku, jeśli masz wystarczająco dużo wolnej pamięci jako
cały proces odbywa się w buforach systemu plików.
Skompresowany plik wykonywalny składa się z kodu pośredniczącego UPX i nakładki
który zawiera oryginalny program w skompresowanej formie.
Kod pośredniczący UPX jest statycznie połączonym plikiem wykonywalnym ELF i robi to
podczas uruchamiania programu:
1) zdekompresuj nakładkę do tymczasowej lokalizacji w / Tmp
2) otwórz plik tymczasowy do odczytu
3) spróbuj usunąć plik tymczasowy i uruchom (execve)
nieskompresowany program w / Tmp za pomocą / proc //fd/X jako
osiągnięty w kroku 2)
4) jeśli to się nie powiedzie, rozwidlić podproces, aby wyczyścić i
uruchom program w / Tmp w międzyczasie
Kod pośredniczący UPX ma około 1700 bajtów i jest częściowo napisany w asemblerze
i używa tylko wywołań systemowych jądra. Nie jest powiązany z żadną biblioteką libc.
Konkretne wady:
- Potrzebujesz dodatkowego wolnego miejsca na dysku dla nieskompresowanego programu
w telefonie / Tmp informator. Ten program jest natychmiast usuwany
dekompresji, ale nadal potrzebujesz go przez cały czas wykonania
programu.
- Ty musisz mieć / proc obsługa systemu plików, ponieważ kod pośredniczący chce się otworzyć
/ proc //exe i potrzeby / proc //fd/X. Oznacza to również, że ty
nie może kompresować programów używanych podczas sekwencji startowej
zanim / proc jest zamontowany.
- Narzędzia takie jak `top' będą wyświetlać wartości liczbowe w trakcie procesu
pole nazwy. Dzieje się tak, ponieważ Linux oblicza nazwę procesu z
pierwszy argument ostatniego wywołania systemowego execve (zazwyczaj
coś jak / proc //fd/3).
- Z powodu tymczasowej dekompresji na dysk prędkość dekompresji
nie jest tak szybki, jak w przypadku innych formatów wykonywalnych. Mimo to widzę
brak zauważalnego opóźnienia przy uruchamianiu programów takich jak mój ~3 MiB emacs (który
jest mniejszy niż 1 MiB po skompresowaniu :-).
Dodatkowe opcje dostępne dla tego formatu wykonywalnego:
--force-execve Wymuś użycie ogólnego „execve” linux/386
format, tj. nie próbuj linux/elf386 i
formaty linux/sh386.
UWAGI DLA PS1/EXE
Jest to format wykonywalny używany przez Sony PlayStation (PSone), oparty na Mips R3000
konsola do gier, która jest popularna od późnych lat 90. Obsługa tego formatu jest bardzo
podobny do Atari, z powodu nostalgicznych uczuć jednego z autorów.
Spakowane programy będą bajtowo identyczne z oryginałem po dekompresji, aż do skutku
ogłoszenie.
Maksymalny rozmiar po nieskompresowaniu: ~1.89 / ~7.60 MiB.
Uwagi:
- UPX domyślnie tworzy odpowiedni plik wykonywalny do CD-Masteringu
i przeniesienie konsoli. W przypadku głównego pliku wykonywalnego CD-Master możesz również spróbować
specjalną opcję „--boot-only”, jak opisano poniżej.
Zgłoszono, że pliki wykonywalne spakowane w upx są w pełni kompatybilne z
Sony PlayStation 2 (PS2, PStwo) i Sony PlayStation Portable (PSP).
Tryb emulacji Sony PlayStation (PSone).
- Zwykle spakowane pliki używają tych samych obszarów pamięci, co pliki nieskompresowane
wersji, aby podczas rozpakowywania nie nadpisywały innych obszarów pamięci.
Jeśli nie jest to możliwe, UPX przerwie wyświetlanie „nakładania się spakowanych danych”
błąd. Z opcją „--force” UPX przeniesie adres ładowania
dla spakowanego pliku, ale to nie jest prawdziwy problem, jeśli jest to pojedynczy lub
główny plik wykonywalny.
Dodatkowe opcje dostępne dla tego formatu wykonywalnego:
--all-methods Kompresuje program kilka razy, używając all
dostępne metody kompresji. To może się poprawić
współczynnik kompresji w niektórych przypadkach, ale zwykle
metoda domyślna i tak daje najlepsze rezultaty.
--8-bit Używa kompresji rozmiaru 8 bitów [domyślnie: 32 bity]
--8mib-ram PSone ma dostępne 8 MB pamięci RAM [domyślnie: 2 MiB]
--boot-only Ten format jest przeznaczony tylko dla głównych exów i CD-Masteringu!
Może nieznacznie poprawić współczynnik kompresji,
procedury dekompresji są szybsze niż te domyślne.
Ale nie można go użyć do transferu konsoli!
--no-align Ta opcja wyłącza format sektora danych trybu CD 2
wyrównanie. Może nieznacznie poprawia współczynnik kompresji,
ale skompresowany plik wykonywalny nie uruchomi się z płyty CD.
Użyj go tylko do transferu konsoli!
UWAGI DLA RTM32/PE i RAMIĘ/PE
To samo co win32/pe.
UWAGI DLA TMT/ADAM
Ten format jest używany przez kompilator TMT Pascal - patrz http://www.tmt.com/ .
Dodatkowe opcje dostępne dla tego formatu wykonywalnego:
--all-methods Kompresuje program kilka razy, używając all
dostępne metody kompresji. To może się poprawić
współczynnik kompresji w niektórych przypadkach, ale zwykle
metoda domyślna i tak daje najlepsze rezultaty.
--all-filters Kompresuje program kilka razy, używając all
dostępne filtry przetwarzania wstępnego. To może się poprawić
współczynnik kompresji w niektórych przypadkach, ale zwykle
filtr domyślny i tak daje najlepsze wyniki.
UWAGI DLA VMLINUZ/386
Formaty vmlinuz/386 i bvmlinuz/386 pobierają bootowalne jądro Linuksa skompresowane gzipem
image („vmlinuz”, „zImage”, „bzImage”), zdekompresuj go gzip i ponownie skompresuj za pomocą UPX
metoda kompresji.
vmlinuz/386 jest całkowicie niezwiązany z innymi formatami wykonywalnymi Linuksa i tak nie jest
podzielić się swoimi wadami.
Uwagi:
- Upewnij się, że wyświetla się „vmlinuz/386” lub „bvmlinuz/386”
podczas kompresji - w przeciwnym razie niewłaściwy format pliku wykonywalnego
mógł być używany, a jądro nie chce się uruchomić.
Korzyści:
- Lepsza kompresja (ale zauważ, że jądro było już skompresowane,
więc poprawa nie jest tak duża jak w przypadku innych formatów).
Mimo to zapisane bajty mogą być niezbędne do specjalnych potrzeb, takich jak
dyski rozruchowe.
Na przykład oto, co otrzymuję dla mojego jądra 2.2.16:
1589708 vmlinux
641073 bz Obraz [oryginał]
560755 bzImage.upx [skompresowany przez „upx -9”]
- Znacznie szybsza dekompresja podczas uruchamiania jądra (ale kernel
prędkość dekompresji nie jest obecnie problemem).
Wady:
(None)
Dodatkowe opcje dostępne dla tego formatu wykonywalnego:
--all-methods Kompresuje program kilka razy, używając all
dostępne metody kompresji. To może się poprawić
współczynnik kompresji w niektórych przypadkach, ale zwykle
metoda domyślna i tak daje najlepsze rezultaty.
--all-filters Kompresuje program kilka razy, używając all
dostępne filtry przetwarzania wstępnego. To może się poprawić
współczynnik kompresji w niektórych przypadkach, ale zwykle
filtr domyślny i tak daje najlepsze wyniki.
UWAGI DLA WATCOM/LE
UPX został pomyślnie przetestowany z następującymi przedłużaczami:
DOS4G, DOS4GW, PMODE/W, DOS32a, CauseWay.
Przedłużacz WDOS/X jest częściowo obsługiwany (szczegóły
zobacz plik błędy BŁĘDY).
Biblioteki DLL i format LX nie są obsługiwane.
Dodatkowe opcje dostępne dla tego formatu wykonywalnego:
--le Tworzy niezwiązane wyjście LE zamiast
zachowując bieżący kod pośredniczący.
UWAGI DLA WIN32/PE
Wsparcie PE w UPX jest teraz dość stabilny, ale prawdopodobnie nadal jest ich trochę
niezgodności z niektórymi plikami.
Ze względu na sposób UPX (i innych programów pakujących dla tego formatu) działa, widać wzrost
wykorzystanie pamięci przez skompresowane pliki, ponieważ cały program jest ładowany do pamięci w
uruchomienie. Jeśli uruchomisz kilka wystąpień ogromnych skompresowanych programów, marnujesz pamięć
ponieważ wspólne segmenty programu nie będą współużytkowane przez instancje. Na
z drugiej strony, jeśli kompresujesz tylko mniejsze programy lub uruchamiasz tylko jedną instancję
większych programów, to ta kara jest mniejsza, ale nadal jest.
Jeśli uruchamiasz pliki wykonywalne z sieci, skompresowane programy będą ładować się szybciej i
wymagają mniejszej przepustowości podczas wykonywania.
Obsługiwane są biblioteki DLL. Ale skompresowane biblioteki DLL UPX nie mogą udostępniać wspólnych danych i kodu, gdy są
został użyty przez wiele aplikacji. Więc kompresowanie msvcrt.dll jest stratą pamięci, ale
kompresowanie wtyczek dll konkretnej aplikacji może być lepszym pomysłem.
Obsługiwane są wygaszacze ekranu, z zastrzeżeniem, że nazwa pliku musi kończyć się na „.scr”
(ponieważ wygaszacze ekranu są obsługiwane nieco inaczej niż zwykłe pliki exe).
Skompresowane pliki PE UPX mają niewielki narzut pamięci (zwykle w zakresie 10 - 30 KiB)
co można zobaczyć, określając przełącznik wiersza poleceń „-i” podczas kompresji.
Dodatkowe opcje dostępne dla tego formatu wykonywalnego:
--compress-exports=0 Nie kompresuj sekcji eksportu.
Użyj tego, jeśli planujesz uruchomić skompresowany
program pod Wine.
--compress-exports=1 Kompresuje sekcję eksportu. [DOMYŚLNY]
Kompresja sekcji eksportu może poprawić
współczynnik kompresji całkiem sporo, ale może nie działać
ze wszystkimi programami (takimi jak winword.exe).
UPX nigdy nie kompresuje sekcji eksportu biblioteki DLL
niezależnie od tej opcji.
--compress-icons=0 Nie kompresuj żadnych ikon.
--compress-icons=1 Kompresuje wszystkie oprócz pierwszej ikony.
--compress-icons=2 Kompresuje wszystkie ikony, których nie ma w
pierwszy katalog ikon. [DOMYŚLNY]
--compress-icons=3 Kompresuje wszystkie ikony.
--compress-resources=0 W ogóle nie kompresuj żadnych zasobów.
--keep-resource=list Nie kompresuj zasobów określonych na liście.
Członkowie listy są oddzieleni przecinkami.
Element listy ma następujący format: I .
I jest typem zasobu. Typy standardowe
muszą być określone jako liczby dziesiętne, typy użytkowników mogą być
określone przez dziesiętne identyfikatory lub łańcuchy. I jest
identyfikator zasobu. Może to być liczba dziesiętna
lub sznurek. Na przykład:
--keep-resource=2/MYBITMAP,5,6/12345
UPX nie skompresuje nazwanego zasobu mapy bitowej „MYBITMAP”,
pozostawia nieskompresowany każdy zasób okna dialogowego (5) i
nie dotknie zasobu tabeli ciągów z identyfikatorem
12345.
--force Wymuś kompresję nawet wtedy, gdy istnieje plik
nieoczekiwana wartość w polu nagłówka.
Używaj ostrożnie.
--strip-relocs=0 Nie usuwaj rekordów relokacji.
--strip-relocs=1 Usuń rekordy relokacji. [DOMYŚLNY]
Ta opcja działa tylko na plikach wykonywalnych z bazą
adres większy lub równy 0x400000. Zwykle
skompresowane pliki stają się mniejsze, ale niektóre pliki
może stać się większy. Zauważ, że wynikowy plik będzie
nie działają pod Windows 3.x (Win32s).
UPX nigdy nie usuwa relokacji z biblioteki DLL
niezależnie od tej opcji.
--all-methods Kompresuje program kilka razy, używając all
dostępne metody kompresji. To może się poprawić
współczynnik kompresji w niektórych przypadkach, ale zwykle
metoda domyślna i tak daje najlepsze rezultaty.
--all-filters Kompresuje program kilka razy, używając all
dostępne filtry przetwarzania wstępnego. To może się poprawić
współczynnik kompresji w niektórych przypadkach, ale zwykle
filtr domyślny i tak daje najlepsze wyniki.
DIAGNOSTYKA
Status wyjścia to zwykle 0; jeśli wystąpi błąd, kod wyjścia to 1. Jeśli pojawi się ostrzeżenie, wyjdź
stan to 2.
UPXdiagnostyka ma być oczywista.
Użyj upx-ucl online, korzystając z usług onworks.net