Il s'agit de la commande upx-ucl qui peut être exécutée dans le fournisseur d'hébergement gratuit OnWorks en utilisant l'un de nos multiples postes de travail en ligne gratuits tels que Ubuntu Online, Fedora Online, l'émulateur en ligne Windows ou l'émulateur en ligne MAC OS
PROGRAMME:
Nom
upx - compresse ou développe des fichiers exécutables
SYNOPSIS
Oops [ commander ] [ Options ] nom de fichier...
RÉSUMÉ
Le packer ultime pour les exécutables
Copyright (c) 1996-2013 Markus Oberhumer, Laszlo Molnar & John Reiser
http://upx.sourceforge.net
UPX est un packer exécutable portable, extensible et haute performance pour plusieurs
formats exécutables. Il atteint un excellent taux de compression et offre *très* vite
décompression. Vos exécutables ne souffrent d'aucune surcharge de mémoire ou d'autres inconvénients pour la plupart des
les formats pris en charge, en raison de la décompression sur place.
Bien que vous puissiez utiliser UPX librement pour les exécutables non commerciaux et commerciaux (pour
détails voir le fichier /usr/share/doc/upx-ucl/copyright), nous vous serions très reconnaissants de
crédit UPX et nous-mêmes dans la documentation, incluant éventuellement une référence à la UPX
page d'accueil. Merci.
[ À l'aide de UPX dans les applications non OpenSource sans crédits appropriés est considéré comme non
politiquement correct ;-) ]
AVIS DE NON-RESPONSABILITE
UPX est livré avec ABSOLUMENT AUCUNE GARANTIE ; pour plus de détails voir le fichier
/usr/share/doc/upx-ucl/copyright.
Il s'agit de la première version de qualité de production, et nous prévoyons que les futures versions 1.xx seront
être rétrocompatible avec cette version.
Veuillez signaler tout problème ou suggestion aux auteurs. Merci.
DESCRIPTION
UPX est un packer exécutable polyvalent avec les fonctionnalités suivantes :
- excellent taux de compression : compresse mieux que zip/gzip,
utilisez UPX pour diminuer la taille de votre distribution !
- décompression très rapide : environ 10 MiB/sec sur un ancien Pentium 133,
environ 200 Mio/sec sur un Athlon XP 2000+.
- pas de surcharge mémoire pour vos exécutables compressés pour la plupart des
formats pris en charge
- safe : vous pouvez lister, tester et décompresser vos exécutables
En outre, une somme de contrôle du fichier compressé et non compressé est
maintenu en interne.
- universel : UPX peut compresser un certain nombre de formats exécutables :
* atari/tos
* bvmlinuz/386 [noyau Linux amorçable]
* djgpp2/coff
*dos/com
*dos/exe
*dos/sys
*linux/386
*linux/elf386
*linux/sh386
*ps1/exe
* rtm32/pe
* tmt/adam
* vmlinuz/386 [noyau Linux amorçable]
*vmlinux/386
* watcom/le (supportant DOS4G, PMODE/W, DOS32a et CauseWay)
* win32/pe (exe et dll)
* arm/pe (exe et dll)
* Linux/elfamd64
* linux/elfppc32
* mach/elfppc32
- portable : UPX est écrit en C++ portable neutre endian
- extensible : en raison de la disposition de la classe, il est très facile à prendre en charge
nouveaux formats exécutables ou ajout de nouveaux algorithmes de compression
- gratuit : UPX peut être distribué et utilisé librement. Et à partir de la version 0.99
le code source complet d'UPX est publié sous GNU General Public
Licence (GPL) !
Vous comprenez probablement maintenant pourquoi nous appelons UPX le "ultime" packer exécutable.
COMMANDES
Compresser
C'est l'opération par défaut, par ex. Oops votrefichier.exe compressera le fichier spécifié sur
la ligne de commande.
Décompresser
Tous UPX les formats de fichiers pris en charge peuvent être décompressés à l'aide du -d interrupteur, par ex. Oops -d
votrefichier.exe va décompresser le fichier que vous venez de compresser.
Le test
Le -t La commande teste l'intégrité des données compressées et non compressées, par ex. Oops -t
votrefichier.exe vérifiez si votre fichier peut être décompressé en toute sécurité. Notez que cette commande
ne vérifie pas tout le fichier, seulement la partie qui sera décompressée pendant le programme
exécution. Cela signifie que vous ne devez pas utiliser cette commande à la place d'un antivirus.
Liste
Le -l La commande imprime des informations sur les fichiers compressés spécifiés sur le
ligne de commande en tant que paramètres, par exemple Oops -l votrefichier.exe montre le compressé / non compressé
taille et le taux de compression de votrefichier.exe.
OPTIONS
-q: taisez-vous, supprimez les avertissements
-q -q (ou -qq): soyez très silencieux, supprimez les erreurs
-q -q -q (ou -qqq): ne produit aucune sortie
--Aidez-moi: imprime l'aide
--version: imprimer la version de UPX
--exact: lors de la compression, nécessite de pouvoir obtenir un fichier identique à l'octet après
décompression avec option -d. [REMARQUE : il s'agit d'un travail en cours et n'est pas pris en charge pour tous
formats encore. Si vous vous en souciez, comme solution de contournement, vous pouvez compresser puis décompresser votre
programmer une première fois - toute autre étape de compression-décompression devrait alors produire un octet-
résultats identiques par rapport à la première version décompressée.]
[ ...à écrire... - tapez `Oops --Aidez-moi' pour l'instant ]
COMPRESSION NIVEAUX & TUNING
UPX offre dix niveaux de compression différents de -1 à -9et --meilleur. Le défaut
le niveau de compression est -8 pour les fichiers inférieurs à 512 Kio, et -7 autrement.
· Les niveaux de compression 1, 2 et 3 sont assez rapides.
· Les niveaux de compression 4, 5 et 6 permettent d'obtenir un bon rapport temps/rapport.
· Les niveaux de compression 7, 8 et 9 favorisent le taux de compression par rapport à la vitesse.
· Niveau de compression --meilleur peut prendre beaucoup de temps.
Notez que le niveau de compression --meilleur peut être un peu lent pour les gros fichiers, mais vous
devez absolument l'utiliser lors de la publication d'une version finale de votre programme.
Info rapide pour obtenir le meilleur taux de compression :
· Essayer Oops --brute monfichier.exe ou encore Oops --ultra brutal monfichier.exe.
· Essayez si --overlay=bande œuvres.
· Pour les programmes win32/pe, il y a --strip-relocs=0. Voir les remarques ci-dessous.
RECOUVREMENT MANIPULATION OPTIONS
Info : Un "overlay" signifie des données auxiliaires attachées après la fin logique d'un exécutable,
et il contient souvent des données spécifiques à l'application (c'est une pratique courante pour éviter un
fichier de données supplémentaire, bien qu'il soit préférable d'utiliser des sections de ressources).
UPX gère les superpositions comme le font de nombreux autres packers exécutables : il copie simplement la superposition
après l'image compressée. Cela fonctionne avec certains fichiers, mais pas avec d'autres,
selon la façon dont une application accède réellement à ces données superposées.
--overlay=copy Copie toutes les données supplémentaires jointes au fichier. [DÉFAUT]
--overlay=strip Supprime toute superposition du programme au lieu de
en le copiant. Soyez prévenu, cela peut rendre le fichier compressé
plantage du programme ou autrement inutilisable.
--overlay=skip Refuse de compresser un programme qui a un overlay.
ENVIRONNEMENT
La variable d'environnement UPX peut contenir un ensemble d'options par défaut pour UPX. Ces options sont
interprété en premier et peut être écrasé par des paramètres de ligne de commande explicites. Pour
Exemple:
pour DOS/Windows : définissez UPX=-9 --compress-icons#0
pour sh/ksh/zsh : UPX="-9 --compress-icons=0" ; exporter UPX
pour csh/tcsh : setenv UPX "-9 --compress-icons=0"
Sous DOS/Windows, vous devez utiliser '#' au lieu de '=' lors de la définition de la variable d'environnement
en raison d'une limitation de COMMAND.COM.
Toutes les options ne sont pas valides dans la variable d'environnement - UPX vais vous dire.
Vous pouvez explicitement utiliser le --no-env option pour ignorer la variable d'environnement.
NOTES POUR LES CANADIENS THE PRISE EN CHARGE EXÉCUTABLE FORMATS
NOTES POUR LES CANADIENS ATARI/TOS
Il s'agit du format exécutable utilisé par l'Atari ST/TT, un ordinateur personnel basé sur Motorola 68000.
ordinateur qui était populaire à la fin des années 80. La prise en charge de ce format est uniquement due à
sentiments nostalgiques de l'un des auteurs et ne sert à rien :-). Voir
http://www.freemint.de pour plus d'informations.
Les programmes compressés seront identiques en octets à l'original après décompression. Tout débogage
les informations seront supprimées, cependant.
Options supplémentaires disponibles pour ce format exécutable :
--all-methods Compresser le programme plusieurs fois, en utilisant tous
méthodes de compression disponibles. Cela peut améliorer
le taux de compression dans certains cas, mais généralement
la méthode par défaut donne les meilleurs résultats de toute façon.
NOTES POUR LES CANADIENS BVMLINUZ/I386
Identique à vmlinuz/i386.
NOTES POUR LES CANADIENS DOS/COM
Évidemment UPX ne fonctionnera pas avec les exécutables qui veulent lire les données d'eux-mêmes (comme
certains utilitaires de ligne de commande fournis avec Win95/98/ME).
Les programmes compressés ne fonctionnent que sur un 286+.
Les programmes compressés seront identiques en octets à l'original après décompression.
Taille maximale non compressée : ~ 65100 XNUMX octets.
Options supplémentaires disponibles pour ce format exécutable :
--8086 Créez un exécutable qui fonctionne sur n'importe quel processeur 8086.
--all-methods Compresser le programme plusieurs fois, en utilisant tous
méthodes de compression disponibles. Cela peut améliorer
le taux de compression dans certains cas, mais généralement
la méthode par défaut donne les meilleurs résultats de toute façon.
--all-filters Compresser le programme plusieurs fois, en utilisant tous
filtres de prétraitement disponibles. Cela peut améliorer
le taux de compression dans certains cas, mais généralement
le filtre par défaut donne les meilleurs résultats de toute façon.
NOTES POUR LES CANADIENS DOS/EXE
dos/exe représente tous les exécutables DOS "normaux" 16 bits.
Évidemment UPX ne fonctionnera pas avec les exécutables qui veulent lire les données d'eux-mêmes (comme
certains utilitaires de ligne de commande fournis avec Win95/98/ME).
Les programmes compressés ne fonctionnent que sur un 286+.
Options supplémentaires disponibles pour ce format exécutable :
--8086 Créez un exécutable qui fonctionne sur n'importe quel processeur 8086.
--no-reloc N'utilise aucun enregistrement de relocalisation dans l'en-tête exe.
--all-methods Compresser le programme plusieurs fois, en utilisant tous
méthodes de compression disponibles. Cela peut améliorer
le taux de compression dans certains cas, mais généralement
la méthode par défaut donne les meilleurs résultats de toute façon.
NOTES POUR LES CANADIENS DOS/SYS
Les programmes compressés ne fonctionnent que sur un 286+.
Les programmes compressés seront identiques en octets à l'original après décompression.
Taille maximale non compressée : ~ 65350 XNUMX octets.
Options supplémentaires disponibles pour ce format exécutable :
--8086 Créez un exécutable qui fonctionne sur n'importe quel processeur 8086.
--all-methods Compresser le programme plusieurs fois, en utilisant tous
méthodes de compression disponibles. Cela peut améliorer
le taux de compression dans certains cas, mais généralement
la méthode par défaut donne les meilleurs résultats de toute façon.
--all-filters Compresser le programme plusieurs fois, en utilisant tous
filtres de prétraitement disponibles. Cela peut améliorer
le taux de compression dans certains cas, mais généralement
le filtre par défaut donne les meilleurs résultats de toute façon.
NOTES POUR LES CANADIENS DJGPP2/COFF
Tout d'abord, il est recommandé d'utiliser UPX *à la place de bande. bande a le très mauvais
l'habitude de remplacer votre talon par sa propre version (obsolète). en outre UPX corrige un
bug/fonctionnalité dans la bande v2.8.x : cela corrigera l'alignement de 4 Kio du stub.
UPX inclut toutes les fonctionnalités de stubify. Cela signifie qu'il stubifiera automatiquement
vos fichiers COFF. Utilisez l'option --coff pour désactiver cette fonctionnalité (voir ci-dessous).
UPX gère automatiquement les fichiers pack Allegro.
Le format DLM (une extension de bibliothèque partagée plutôt exotique) n'est pas pris en charge.
Les programmes compressés seront identiques en octets à l'original après décompression. Tout débogage
les informations et les déchets de fin seront cependant supprimés.
Options supplémentaires disponibles pour ce format exécutable :
--coff Produit une sortie COFF au lieu d'EXE. Par défaut
UPX conserve votre stub actuel.
--all-methods Compresser le programme plusieurs fois, en utilisant tous
méthodes de compression disponibles. Cela peut améliorer
le taux de compression dans certains cas, mais généralement
la méthode par défaut donne les meilleurs résultats de toute façon.
--all-filters Compresser le programme plusieurs fois, en utilisant tous
filtres de prétraitement disponibles. Cela peut améliorer
le taux de compression dans certains cas, mais généralement
le filtre par défaut donne les meilleurs résultats de toute façon.
NOTES POUR LES CANADIENS LINUX [général]
Introduction
La prise en charge de Linux/386 dans UPX consiste en 3 formats exécutables différents,
un optimisé pour les exécutables ELF ("linux/elf386"), un optimisé
pour les scripts shell ("linux/sh386"), et un format générique
("linux/386").
Nous commencerons d'abord par une discussion générale, mais s'il vous plaît
lisez également les documents pertinents pour chacun des formats individuels.
En outre, il existe un support spécial pour les noyaux amorçables - voir le
description du format vmlinuz/386.
Présentation générale de l'utilisateur
L'exécution d'un programme exécutable compressé prend moins d'espace sur un
Support de stockage ``permanent'' (tel qu'un disque dur, une disquette,
CD-ROM, mémoire flash, EPROM, etc.) pour plus d'espace dans un ou plusieurs
Les supports de stockage « temporaires » (tels que la RAM, l'espace d'échange, / Tmp, Etc).
L'exécution d'un exécutable compressé nécessite également un processeur supplémentaire
cycles pour générer l'exécutable compressé en premier lieu,
et de le décompresser à chaque invocation.
Combien d'espace est échangé? Cela dépend de l'exécutable, mais de nombreux
programmes économisent 30 à 50 % d'espace disque permanent. Combien de CPU
frais généraux est-il? Encore une fois, cela dépend de l'exécutable, mais
la vitesse de décompression est généralement d'au moins plusieurs mégaoctets par seconde,
et est souvent limité par la vitesse du disque sous-jacent
ou E/S réseau.
En fonction des statistiques d'utilisation et d'accès, et de la relative
vitesses du processeur, de la RAM, de l'espace d'échange, / Tmp, et le stockage du système de fichiers, puis
l'appel et l'exécution d'un exécutable compressé peuvent être plus rapides que
exécuter directement le programme non compressé correspondant.
Le système d'exploitation peut effectuer moins d'opérations d'E/S coûteuses
pour appeler le programme compressé. Pagination vers ou depuis l'espace d'échange
or / Tmp peut être plus rapide que la pagination à partir du système de fichiers général.
Les programmes ``de taille moyenne'' qui accèdent à environ 1/3 à 1/2 de leur
les octets de programme stockés peuvent particulièrement bien faire avec la compression.
Les petits programmes ont tendance à ne pas en profiter autant parce que l'absolu
l'épargne est moindre. Les grands programmes ont tendance à ne pas bénéficier proportionnellement
parce que chaque invocation peut n'utiliser qu'une petite fraction du programme,
pourtant UPX décompresse le programme entier avant de l'invoquer.
Mais dans les environnements où le stockage sur disque ou sur mémoire flash est limité,
alors la compression peut gagner de toute façon.
Actuellement, les exécutables compressés par UPX ne partagent pas la RAM lors de l'exécution
à la manière des exécutables mappés à partir d'un système de fichiers. Comme un
résultat, si le même programme est exécuté simultanément par plusieurs
processus, alors l'utilisation de la version compressée nécessitera plus de RAM et/ou
espace d'échange. Ainsi, les programmes shell (bash, csh, etc.) et ``make''
pourraient ne pas être de bons candidats pour la compression.
UPX reconnaît trois formats exécutables pour Linux : Linux/elf386,
Linux/sh386 et Linux/386. Linux/386 est le format le plus générique ;
il s'adapte à n'importe quel fichier qui peut être exécuté. Au moment de l'exécution, l'UPX
le talon de décompression se recrée dans / Tmp une copie du fichier original,
puis la copie est (ré-)exécutée avec les mêmes arguments.
Les exécutables binaires ELF préfèrent le format Linux/elf386 par défaut,
car UPX les décompresse directement dans la RAM, n'en utilise qu'un
exec, n'utilise pas d'espace dans / Tmp, et n'utilise pas /proc.
Scripts shell où le shell sous-jacent accepte un argument ``-c''
peut utiliser le format Linux/sh386. UPX décompresse le script shell
en mémoire faible, puis mappe le shell et transmet l'intégralité du texte du
script comme argument avec un ``-c'' de début.
Avantages généraux :
- UPX peut compresser tous les exécutables, que ce soit AOUT, ELF, libc4, libc5,
libc6, scripts Shell/Perl/Python/..., classe Java autonome
binaires, ou autre...
Tous les scripts et programmes fonctionneront comme avant.
- Les programmes compressés sont complètement autonomes. Pas besoin de
tout programme externe.
- UPX conserve votre programme d'origine intact. Cela signifie que
après décompression vous aurez une version octet identique,
et vous pouvez utiliser UPX comme compresseur de fichiers tout comme gzip.
[ Notez que UPX maintient une somme de contrôle du fichier en interne,
il s'agit donc bien d'une alternative fiable. ]
- Comme le stub n'utilise que des appels système et n'est pas lié à la libc, il
devrait fonctionner sous n'importe quelle configuration Linux pouvant exécuter ELF
binaires.
- Pour la même raison, les exécutables compressés doivent s'exécuter sous
FreeBSD et d'autres systèmes pouvant exécuter des binaires Linux.
[ Veuillez envoyer vos commentaires sur ce sujet ]
Inconvénients généraux :
- Il est déconseillé de compresser des programmes qui ont généralement de nombreux
instances en cours d'exécution (comme « sh » ou « make ») parce que les segments communs de
les programmes compressés ne seront plus partagés entre les différents
procédés.
- `ldd' et `size' n'afficheront rien d'utile car tout ce qu'ils
voir est le stub lié statiquement. Depuis la version 0.82 la section
les en-têtes sont supprimés du stub UPX et "taille" ne le fait même pas
reconnaître le format de fichier. Le fichier patches/patch-elfcode.h a un
patch pour corriger ce bogue dans `size' et d'autres programmes qui utilisent GNU BFD.
Notes générales:
- Comme UPX laisse votre programme d'origine intact, il est avantageux
pour le décaper avant la compression.
- Si vous compressez un script, vous perdrez l'indépendance de la plate-forme -
cela peut être un problème si vous utilisez des disques montés NFS.
- La compression des programmes suid, guid et sticky-bit est rejetée
en raison des implications possibles pour la sécurité.
- Pour la même raison, il n'y a aucun sens à faire de la compression
programme suid.
- Évidemment, UPX ne fonctionnera pas avec les exécutables qui veulent lire des données
d'eux-mêmes. Par exemple, cela pourrait être un problème pour les scripts Perl
qui accèdent à leurs lignes __DATA__.
- En cas d'erreurs internes, le stub s'arrêtera avec le code de sortie 127.
Les raisons typiques pour que cela se produise sont que le programme a en quelque sorte
été modifié après compression.
Lancer `strace -o strace.log fichier_compressé' vous en dira plus.
NOTES POUR LES CANADIENS LINUX/ELF386
Veuillez d'abord lire la description générale de Linux.
Le format linux/elf386 décompresse directement dans la RAM, utilise un seul exec, n'utilise pas
espace dans / Tmp, et n'utilise pas /proc.
Linux/elf386 est automatiquement sélectionné pour les exécutables Linux ELF.
Les programmes compressés seront identiques en octets à l'original après décompression.
Comment ça marche:
Pour les exécutables ELF, UPX décompresse directement en mémoire, simulant
le mappage que le noyau du système d'exploitation utilise pendant exec(),
y compris l'interpréteur de programme PT_INTERP (le cas échéant).
Le brk() est défini par un segment spécial PT_LOAD dans le fichier compressé
exécutable lui-même. UPX nettoie ensuite la pile, sauf pour
arguments, variables d'environnement et entrées Elf_auxv (c'est
requis par des bogues dans le code de démarrage de /lib/ld-linux.so à partir de
mai 2000) et transfère le contrôle à l'interprète du programme ou
l'adresse e_entry de l'exécutable d'origine.
Le stub UPX fait environ 1700 octets, en partie écrit en assembleur
et n'utilise que les appels système du noyau. Il n'est lié à aucune libc.
Inconvénients spécifiques :
- Pour les formats linux/elf386 et linux/sh386, vous vous fierez
RAM et espace d'échange pour contenir tout le programme décompressé pendant
la durée de vie du processus. Si vous utilisez déjà la plupart de votre swap
l'espace, alors vous pouvez manquer. Un système qui manque de mémoire
peut devenir fragile. De nombreux programmes ne réagissent pas correctement lorsque
malloc() renvoie 0. Avec les nouveaux noyaux Linux, le noyau
peut décider de tuer certains processus pour récupérer de la mémoire, et vous
peut ne pas aimer le choix du noyau de celui à tuer. Fonctionnement
/usr/bin/haut est un moyen de vérifier l'utilisation de l'espace d'échange.
Options supplémentaires disponibles pour ce format exécutable :
(Aucun)
NOTES POUR LES CANADIENS Linux/SH386
Veuillez d'abord lire la description générale de Linux.
Les scripts shell où le shell sous-jacent accepte un argument ``-c'' peuvent utiliser le Linux/sh386
le format. UPX décompresse le script shell en mémoire faible, puis mappe le shell et passe
le texte entier du script comme argument avec un ``-c'' en tête. Il n'utilise pas d'espace
in / Tmp, et n'utilise pas /proc.
Linux/sh386 est automatiquement sélectionné pour les scripts shell qui utilisent un shell connu.
Les programmes compressés seront identiques en octets à l'original après décompression.
Comment ça marche:
Pour les exécutables de script shell (fichiers commençant par "#!/" ou "#! /")
où le shell est connu pour accepter "-c ", UPX décompresse
le fichier en mémoire faible, puis mappe le shell (et son PT_INTERP),
et passe le contrôle au shell avec l'intégralité du fichier décompressé
comme argument après "-c". Les coquilles connues sont sh, ash, bash, bsh, csh,
ksh, tcsh, pdksh. Restriction : UPX ne peut pas utiliser cette méthode
pour les scripts shell qui utilisent le seul argument de chaîne facultatif après
le nom du shell dans le script (exemple : "#! / Bin / sh option3\n".)
Le stub UPX fait environ 1700 octets, en partie écrit en assembleur
et n'utilise que les appels système du noyau. Il n'est lié à aucune libc.
Inconvénients spécifiques :
- Pour les formats linux/elf386 et linux/sh386, vous vous fierez
RAM et espace d'échange pour contenir tout le programme décompressé pendant
la durée de vie du processus. Si vous utilisez déjà la plupart de votre swap
l'espace, alors vous pouvez manquer. Un système qui manque de mémoire
peut devenir fragile. De nombreux programmes ne réagissent pas correctement lorsque
malloc() renvoie 0. Avec les nouveaux noyaux Linux, le noyau
peut décider de tuer certains processus pour récupérer de la mémoire, et vous
peut ne pas aimer le choix du noyau de celui à tuer. Fonctionnement
/usr/bin/haut est un moyen de vérifier l'utilisation de l'espace d'échange.
Options supplémentaires disponibles pour ce format exécutable :
(Aucun)
NOTES POUR LES CANADIENS Linux/386
Veuillez d'abord lire la description générale de Linux.
Le format générique linux/386 se décompresse en / Tmp et besoins / proc prise en charge du système de fichiers. Ce
démarre le programme décompressé via le exécutif() appel système.
Linux/386 n'est sélectionné que si les linux/elf386 et linux/sh386 spécialisés ne reconnaissent pas
un fichier.
Les programmes compressés seront identiques en octets à l'original après décompression.
Comment ça marche:
Pour les fichiers qui ne sont pas ELF et non un script pour un shell "-c" connu,
UPX utilise le noyau execve(), qui nécessite d'abord une décompression en un
fichier temporaire dans le système de fichiers. De façon intéressante -
en raison de la bonne gestion de la mémoire du noyau Linux - ce
n'introduit souvent pas de retard notable et, en fait, il
n'y aura pas du tout d'accès au disque si vous avez assez de mémoire libre comme
l'ensemble du processus se déroule dans les tampons du système de fichiers.
Un exécutable compressé se compose du stub UPX et d'un overlay
qui contient le programme original sous une forme compressée.
Le stub UPX est un exécutable ELF lié statiquement et ne
les éléments suivants au démarrage du programme :
1) décompresser la superposition à un emplacement temporaire dans / Tmp
2) ouvrez le fichier temporaire pour la lecture
3) essayez de supprimer le fichier temporaire et démarrez (execve)
le programme non compressé dans / Tmp grâce à / proc //fd/X comme
atteint par l'étape 2)
4) si cela échoue, lancez un sous-processus pour nettoyer et
démarrer le programme dans / Tmp pendant ce temps
Le stub UPX fait environ 1700 octets, en partie écrit en assembleur
et n'utilise que les appels système du noyau. Il n'est lié à aucune libc.
Inconvénients spécifiques :
- Vous avez besoin d'espace disque libre supplémentaire pour le programme non compressé
dans votre / Tmp annuaire. Ce programme est supprimé immédiatement après
décompression, mais vous en avez toujours besoin pendant toute la durée d'exécution
du programme.
- Vous devez avoir / proc prise en charge du système de fichiers car le stub veut s'ouvrir
/ proc //exe et besoins / proc //fd/X. Cela signifie également que vous
ne peut pas compresser les programmes utilisés pendant la séquence de démarrage
avant / proc est monté.
- Des utilitaires comme « top » afficheront des valeurs numériques dans le processus
champ de nom. C'est parce que Linux calcule le nom du processus à partir de
le premier argument du dernier execve syscall (qui est typiquement
quelque chose comme / proc //fd/3).
- En raison de la décompression temporaire sur le disque, la vitesse de décompression
n'est pas aussi rapide qu'avec les autres formats exécutables. Pourtant, je peux voir
pas de retard notable lors du démarrage de programmes comme mes ~3 MiB emacs (qui
est inférieur à 1 Mio lorsqu'il est compressé :-).
Options supplémentaires disponibles pour ce format exécutable :
--force-execve Force l'utilisation du générique linux/386 "execve"
format, c'est-à-dire n'essayez pas le linux/elf386 et
formats linux/sh386.
NOTES POUR LES CANADIENS PS1/EXE
Il s'agit du format d'exécutable utilisé par la Sony PlayStation (PSone), une base Mips R3000
console de jeu qui est populaire depuis la fin des années 90. La prise en charge de ce format est très
similaire à celui d'Atari, à cause des sentiments nostalgiques de l'un des auteurs.
Les programmes compressés seront identiques en octets à l'original après décompression, jusqu'à ce que
remarquer.
Taille maximale non compressée : ~1.89 / ~7.60 Mio.
Remarques :
- UPX crée par défaut un exécutable approprié pour le CD-Mastering
et transfert de console. Pour un exécutable principal CD-Master, vous pouvez également essayer
l'option spéciale "--boot-only" comme décrit ci-dessous.
Il a été signalé que les exécutables compressés upx sont entièrement compatibles avec
la Sony PlayStation 2 (PS2, PStwo) et la Sony PlayStation Portable (PSP) dans
Mode d'émulation Sony PlayStation (PSone).
- Normalement les fichiers compressés utilisent les mêmes zones mémoire que les fichiers non compressés
versions, afin qu'elles ne remplacent pas les autres zones de mémoire lors du déballage.
Si cela n'est pas possible, UPX abandonnera l'affichage d'un "chevauchement de données compressées"
Erreur. Avec l'option "--force" UPX déplacera l'adresse de chargement
pour le fichier compressé, mais ce n'est pas un réel problème s'il s'agit d'un seul ou
l'exécutable principal.
Options supplémentaires disponibles pour ce format exécutable :
--all-methods Compresser le programme plusieurs fois, en utilisant tous
méthodes de compression disponibles. Cela peut améliorer
le taux de compression dans certains cas, mais généralement
la méthode par défaut donne les meilleurs résultats de toute façon.
--8-bit Utilise une compression de taille 8 bits [par défaut : 32 bits]
--8mib-ram PSone dispose de 8 Mio de RAM [par défaut : 2 Mio]
--boot-only Ce format est réservé aux exes principaux et au mastering de CD !
Cela peut légèrement améliorer le taux de compression,
les routines de décompression sont plus rapides que celles par défaut.
Mais il ne peut pas être utilisé pour le transfert de console !
--no-align Cette option désactive le format du secteur de données du mode 2 du CD
alignement. Peut légèrement améliorer le taux de compression,
mais l'exécutable compressé ne démarrera pas à partir d'un CD.
Utilisez-le uniquement pour le transfert de console !
NOTES POUR LES CANADIENS RTM32/PE et BRAS/PE
Identique à win32/pe.
NOTES POUR LES CANADIENS TMT/ADAM
Ce format est utilisé par le compilateur TMT Pascal - voir http://www.tmt.com/ .
Options supplémentaires disponibles pour ce format exécutable :
--all-methods Compresser le programme plusieurs fois, en utilisant tous
méthodes de compression disponibles. Cela peut améliorer
le taux de compression dans certains cas, mais généralement
la méthode par défaut donne les meilleurs résultats de toute façon.
--all-filters Compresser le programme plusieurs fois, en utilisant tous
filtres de prétraitement disponibles. Cela peut améliorer
le taux de compression dans certains cas, mais généralement
le filtre par défaut donne les meilleurs résultats de toute façon.
NOTES POUR LES CANADIENS VMLINUZ/386
Les formats vmlinuz/386 et bvmlinuz/386 prennent un noyau Linux amorçable compressé avec gzip
image ("vmlinuz", "zImage", "bzImage"), gzip-décompressez-la et re-compressez-la avec le UPX
méthode de compression.
vmlinuz/386 n'a aucun rapport avec les autres formats exécutables Linux, et il ne
partager aucun de leurs inconvénients.
Remarques :
- Assurez-vous que "vmlinuz/386" ou "bvmlinuz/386" est affiché
pendant la compression - sinon un mauvais format d'exécutable
peut avoir été utilisé et le noyau ne démarre pas.
Avantages :
- Meilleure compression (mais notez que le noyau était déjà compressé,
l'amélioration n'est donc pas aussi importante qu'avec d'autres formats).
Néanmoins, les octets enregistrés peuvent être essentiels pour des besoins particuliers tels que
disques de démarrage.
Par exemple, voici ce que j'obtiens pour mon noyau 2.2.16 :
1589708vmlinux
641073 bzImage [original]
560755 bzImage.upx [compressé par "upx -9"]
- Décompression beaucoup plus rapide au démarrage du noyau (mais le noyau
la vitesse de décompression n'est pas vraiment un problème de nos jours).
Inconvénients:
(Aucun)
Options supplémentaires disponibles pour ce format exécutable :
--all-methods Compresser le programme plusieurs fois, en utilisant tous
méthodes de compression disponibles. Cela peut améliorer
le taux de compression dans certains cas, mais généralement
la méthode par défaut donne les meilleurs résultats de toute façon.
--all-filters Compresser le programme plusieurs fois, en utilisant tous
filtres de prétraitement disponibles. Cela peut améliorer
le taux de compression dans certains cas, mais généralement
le filtre par défaut donne les meilleurs résultats de toute façon.
NOTES POUR LES CANADIENS WATCOM/LE
UPX a été testé avec succès avec les rallonges suivantes :
DOS4G, DOS4GW, PMODE/W, DOS32a, CauseWay.
L'extendeur WDOS/X est partiellement pris en charge (pour plus de détails
voir le fichier bugs BUGS).
Les DLL et le format LX ne sont pas pris en charge.
Options supplémentaires disponibles pour ce format exécutable :
--le Produit une sortie LE non liée au lieu de
en gardant le talon actuel.
NOTES POUR LES CANADIENS WIN32/PE
Le soutien du PE en UPX est assez stable maintenant, mais il y a probablement encore
incompatibilités avec certains fichiers.
À cause de la façon UPX (et d'autres packers pour ce format) fonctionne, vous pouvez voir une augmentation
l'utilisation de la mémoire de vos fichiers compressés car l'ensemble du programme est chargé en mémoire à
Commencez. Si vous démarrez plusieurs instances d'énormes programmes compressés, vous gaspillez de la mémoire
car les segments communs du programme ne seront pas partagés entre les instances. Sur le
d'autre part si vous ne compressez que des programmes plus petits ou si vous n'exécutez qu'une seule instance de
programmes plus importants, alors cette pénalité est plus petite, mais elle est toujours là.
Si vous exécutez des exécutables à partir du réseau, les programmes compressés se chargeront plus rapidement et
nécessitent moins de bande passante lors de l'exécution.
Les DLL sont prises en charge. Mais les DLL compressées UPX ne peuvent pas partager de données et de code communs lorsqu'elles
utilisé par plusieurs applications. La compression de msvcrt.dll est donc un gaspillage de mémoire, mais
compresser les plugins dll d'une application particulière peut être une meilleure idée.
Les économiseurs d'écran sont pris en charge, avec la restriction que le nom de fichier doit se terminer par ".scr"
(car les économiseurs d'écran sont gérés légèrement différemment des fichiers exe normaux).
Les fichiers PE compressés UPX ont une surcharge de mémoire mineure (généralement dans la plage de 10 à 30 Ko)
qui peut être vu en spécifiant le commutateur de ligne de commande "-i" pendant la compression.
Options supplémentaires disponibles pour ce format exécutable :
--compress-exports=0 Ne pas compresser la section d'exportation.
Utilisez ceci si vous prévoyez d'exécuter le fichier compressé
programme sous Wine.
--compress-exports=1 Compresser la section d'exportation. [DÉFAUT]
La compression de la section d'exportation peut améliorer la
taux de compression un peu mais peut ne pas fonctionner
avec tous les programmes (comme winword.exe).
UPX ne compresse jamais la section d'exportation d'une DLL
indépendamment de cette option.
--compress-icons=0 Ne compresse aucune icône.
--compress-icons=1 Compresser tout sauf la première icône.
--compress-icons=2 Compresser toutes les icônes qui ne sont pas dans le
premier répertoire d'icônes. [DÉFAUT]
--compress-icons=3 Compresser toutes les icônes.
--compress-resources=0 Ne compresse aucune ressource.
--keep-resource=list Ne compresse pas les ressources spécifiées par la liste.
Les membres de la liste sont séparés par des virgules.
Un membre de liste a le format suivant : I .
je est le type de la ressource. Types standards
doivent être spécifiés sous forme de nombres décimaux, les types d'utilisateurs peuvent être
spécifié par des identifiants décimaux ou des chaînes. je est le
identifiant de la ressource. Il peut s'agir d'un nombre décimal
ou une chaîne. Par exemple:
--keep-resource=2/MONBITMAP,5,6/12345
UPX ne compressera pas la ressource bitmap nommée "MYBITMAP",
il laisse chaque ressource de dialogue (5) non compressée, et
il ne touchera pas la ressource de table de chaîne avec l'identifiant
12345.
--force Forcer la compression même en cas de
valeur inattendue dans un champ d'en-tête.
A utiliser avec précaution.
--strip-relocs=0 Ne supprime pas les enregistrements de réinstallation.
--strip-relocs=1 Supprimer les enregistrements de réinstallation. [DÉFAUT]
Cette option ne fonctionne que sur les exécutables avec base
adresse supérieure ou égale à 0x400000. Habituellement le
les fichiers compressés deviennent plus petits, mais certains fichiers
peut devenir plus grand. Notez que le fichier résultant sera
ne fonctionne pas sous Windows 3.x (Win32s).
UPX ne supprime jamais les relocalisations d'une DLL
indépendamment de cette option.
--all-methods Compresser le programme plusieurs fois, en utilisant tous
méthodes de compression disponibles. Cela peut améliorer
le taux de compression dans certains cas, mais généralement
la méthode par défaut donne les meilleurs résultats de toute façon.
--all-filters Compresser le programme plusieurs fois, en utilisant tous
filtres de prétraitement disponibles. Cela peut améliorer
le taux de compression dans certains cas, mais généralement
le filtre par défaut donne les meilleurs résultats de toute façon.
DIAGNOSTIC
L'état de sortie est normalement 0 ; si une erreur se produit, l'état de sortie est 1. Si un avertissement se produit, quittez
le statut est 2.
UPXLes diagnostics de sont censés être explicites.
Utilisez upx-ucl en ligne en utilisant les services onworks.net
