Hlavní navigace

Unixová komprese v praxi: UPX

Petr Krčmář

Používáte starší stroj s malým diskem nebo chcete prostě ušetřit nějaký ten megabajtík? Stahujte UPX!

Řada z nás, Linuxáků, ještě pořád používá počítače, které už dávno nepatří mezi špičkové stroje, ale je nám líto je vyhodit, protože pro nás můžou pořád ještě udělat dost práce. Co ale dělat, když nám na takovém stroji začíná pomalu docházet místo na disku a my ještě nějaké potřebujeme? Komprimovaný souborový systém je pro zápis nevhodný, smazat už nic nemůžeme. Nemusíme ale hned přistupovat k výměně disku za větší, když máme UPX.

UPX (Ultimate Packer for eXecutables) je výkonný kompresní program, určený pro kompresi spustitelných souborů různých formátů. Podporuje formáty atari/tos, djgpp2/coff, dos/com, dos/exe, dos/sys, linux/386, rtm32/pe, tmt/adam, watcom/le, in32/pe, vmlinuz/386, linux/elf386 a ps1/exe. Umí zkomprimovat i skripty. Jak vidíte, je jich hodně, nechybí linuxové elf386, ale ani uživatelé Windows nepřijdou zkrátka, existuje i verze pro ně.

UPX používá kompresní knihovnu NRV, která ovšem není free. Je velmi výkonná a je navržena pro rychlou kompresi binárních dat. Můžete taky použít free implementaci kompresního algoritmu UCL, která je sice kompatibilní, ale už ne tak výkonnou variantou.

Velkou výhodou UPX je, že ke komprimovanému souboru přidá ještě spustitelný kód, který umožní automatickou transparentní dekompresi a následné spuštění souboru, takže i když je binárka komprimovaná, lze ji bez problému spustit a samorozbalovací kód, který do ní UPX přidal, se postará o dekompresi. V poslední verzi přináší UPX velmi příjemnou novinku, a tou je přímá dekomprese ELF binárek do paměti. Není tedy potřeba žádný odkládací prostor na disku, kam by se soubory před spuštěním rozbalovaly, jak je tomu u jiných linuxových formátů. Díky dobré práci s pamětí se ale ani při tomto neprojeví výraznější zpomalení. Na potřebu odkládacího tmp adresáře ale nesmíte zapomínat při použití například u bootovatelné­ho CD.

Na stránkách projektu jsou k dispozici jak zdrojové kódy, tak již zkompilované balíčky pro Linux, MS Windows a DOS.

Použití je velmi jednoduché. Jako parametr stačí zadat jméno binárky, kterou chceme komprimovat. Uvidíme pěkný průběh komprese a hotovo, soubor je zkomprimován. Jeho původní podoba zmizí, pokud nepoužijeme parametr -k, který nám umožní zachování původního souboru, za jehož název se vloží tečka a vlnka. Pokud potřebujeme původní soubor, použijeme parametr -d (jako decompress).

Pro uživatele MSWindows jsou v UPX velice zajímavé možnosti komprese ikon v souborech. Můžete zkomprimovat všechny, žádnou, nebo všechny kromě první. Komprimovaný program si pak zachová svoji původní ikonu.

Další volbou, která se může hodit, je -l. Takto UPX zobrazí informace o zkomprimovaném souboru jako komprimovaná velikost, původní velikost, kompresní poměr a podobně.

Zajímalo mě, jakých výsledků lze s UPX dosáhnout v praxi. Udělal jsem si proto kopii adresářů /bin, /sbin, /usr/bin do jednoho pracovního adresáře. Celá tahle „kompilace“ obsahovala 1377 souborů a zabírala 107 MB prostoru na disku. Pak jsem všechny soubory nechal zkomprimovat pomocí UPX.

Komprese trvala na Duronu 1.1 GHz přesně 5 minut a 41 sekund. Výsledkem byl adresář o velikosti 49.3 MB. Myslím, že je to solidní výsledek. Padesát ušetřených megabajtů může být někdy opravdu hodně.

Nevýhodou UPX je, že na komprimované soubory nelze použít ldd, přesněji řečeno možné to je, ale nic kloudného se nedozvíte. Stejně na tom budete i při použití size. Soubor je tedy nejdříve nutno rozbalit. Další nevýhodou může být zpomalení při startu některých aplikací. Bohužel jsem neměl k dispozici žádný pomalejší stroj, na kterém bych vyzkoušel rozdíl ve startu nějakého programu. Ale budu rád, když to někdo třeba s 386kou zkusí a napíše do diskuse pod článkem rozdíl v době startu. Na silnějších strojích je rozdíl nepozorovatelný.

UPX se nehodí pro všechny druhy spustitelných souborů. Programy, které při práci čtou data z vlastního souboru (typicky některé perlové skriptíky) nebudou po kompresi pomocí UPX fungovat, protože uvidí jenom komprimovanou podobu, se kterou si nedokáží poradit. Dekomprimovaná kopie z tmp se totiž maže ihned po spuštění. Také se nedoporučuje komprimovat soubory se sticky-bitem kvůli hrozícím bezpečnostím problémům. Rovněž knihovny ke kompresi spíše nedoporučuji, protože pak nefunguje sdílení knihoven v paměti a pro každou aplikaci musí být v paměti samostatná kopie, což zvláště na již zmíněných starších strojích může dělat problémy.

I přes některé záporné vlastnosti plynoucí již z principu komprese spustitelných programů je UPX velmi užitečným nástrojem, který si jistě najde své místo na discích mnoha z nás.

Našli jste v článku chybu?

9. 5. 2003 14:02

Jakub Macek (neregistrovaný)

Jak již bylo v článku napsáno, použitím standardních linuxových programů ldd a size na UPXem komprimovaný soubor získáme informace o zaváděči programu (malá deklomprimační rutina, kterou tam přidá UPX).
Narazil jsem při použití v /usr/local/bin. Pokud projedu binárku UPXem a potom stripem, dostanu 92 bajtový naprosto nepoužitelný soubor.

Ovšem UPX exceluje při použití na DOS a Win32 *.exe a *.dll. není výjimkou, že se 3 až 4 MB soubor po komprimaci vleze na disketu.




8. 5. 2003 2:12

Leos Bitto (neregistrovaný)

"Také se nedoporučuje komprimovat soubory se sticky-bitem kvůli hrozícím bezpečnostím problémům." - nespletl se autor? Po pravdě řečeno mě nenapadá, jaké bezpečnostní problémy by ze sticky bitu mohly vzniknout.

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

Vitalia.cz: Taky věříte na pravidlo 5 sekund?

Taky věříte na pravidlo 5 sekund?

Podnikatel.cz: Změny v cestovních náhradách 2017

Změny v cestovních náhradách 2017

120na80.cz: 5 nejčastějších mýtů o kondomech

5 nejčastějších mýtů o kondomech

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

DigiZone.cz: Rádio Šlágr má licenci pro digi vysílání

Rádio Šlágr má licenci pro digi vysílání

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

Podnikatel.cz: Udávání kvůli EET začalo

Udávání kvůli EET začalo

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí