Dies ist der Befehl upx-ucl, der beim kostenlosen Hosting-Anbieter OnWorks mit einer unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, dem Windows-Online-Emulator oder dem MAC OS-Online-Emulator ausgeführt werden kann
PROGRAMM:
NAME/FUNKTION
upx – ausführbare Dateien komprimieren oder erweitern
ZUSAMMENFASSUNG
upx [ Befehl ] [ Optionen ] Dateinamen...
ABSTRACT
Der ultimative Packer für eXecutables
Copyright (c) 1996-2013 Markus Oberhumer, Laszlo Molnar & John Reiser
http://upx.sourceforge.net
UPX ist ein tragbarer, erweiterbarer, leistungsstarker ausführbarer Packer für verschiedene Zwecke
ausführbare Formate. Es erreicht ein hervorragendes Kompressionsverhältnis und bietet *sehr* schnell
Dekompression. Ihre ausführbaren Dateien haben in den meisten Fällen keinen Speicheraufwand oder andere Nachteile
Die unterstützten Formate aufgrund der In-Place-Dekomprimierung.
Während Sie verwenden können UPX frei für nicht-kommerzielle und kommerzielle ausführbare Dateien (z
Einzelheiten finden Sie in der Datei /usr/share/doc/upx-ucl/copyright).
Kredit UPX und uns selbst in der Dokumentation, ggf. mit einem Verweis darauf UPX
Startseite. Danke.
[ Verwenden von UPX in Nicht-OpenSource-Anwendungen ohne entsprechende Credits gilt dies nicht
politisch korrekt ;-) ]
Haftungsausschluss
UPX kommt mit ABSOLUT KEINER GARANTIE; Einzelheiten finden Sie in der Datei
/usr/share/doc/upx-ucl/copyright.
Dies ist die erste Veröffentlichung in Produktionsqualität, und wir planen, dass dies auch für zukünftige 1.xx-Versionen der Fall sein wird
mit dieser Version abwärtskompatibel sein.
Bitte melden Sie alle Probleme oder Vorschläge den Autoren. Danke.
BESCHREIBUNG
UPX ist ein vielseitiger ausführbarer Packer mit den folgenden Funktionen:
- ausgezeichnetes Komprimierungsverhältnis: komprimiert besser als zip/gzip,
Verwenden Sie UPX, um die Größe Ihrer Distribution zu verringern!
- sehr schnelle Dekomprimierung: etwa 10 MiB/Sek. auf einem alten Pentium 133,
etwa 200 MiB/s auf einem Athlon XP 2000+.
- Für die meisten davon entsteht kein Speicheraufwand für Ihre komprimierten ausführbaren Dateien
unterstützte Formate
- sicher: Sie können Ihre ausführbaren Dateien auflisten, testen und entpacken
Außerdem ist eine Prüfsumme sowohl der komprimierten als auch der unkomprimierten Datei enthalten
intern gepflegt.
- universal: UPX kann eine Reihe ausführbarer Formate packen:
* atari/tos
* bvmlinuz/386 [bootfähiger Linux-Kernel]
* djgpp2/coff
* dos/com
* dos/exe
* dos/sys
* Linux/386
* linux/elf386
* linux/sh386
* ps1/exe
* rtm32/pe
* tmt/adam
* vmlinuz/386 [bootfähiger Linux-Kernel]
* vmlinux/386
* watcom/le (unterstützt DOS4G, PMODE/W, DOS32a und CauseWay)
* win32/pe (exe und dll)
* arm/pe (exe und dll)
* linux/elfamd64
* linux/elfppc32
* mach/elfppc32
- portabel: UPX ist in portablem, endianneutralem C++ geschrieben
- erweiterbar: Aufgrund des Klassenlayouts sehr einfach zu unterstützen
neue ausführbare Formate oder neue Komprimierungsalgorithmen hinzufügen
- kostenlos: UPX kann frei verbreitet und genutzt werden. Und ab Version 0.99
Der vollständige Quellcode von UPX wird unter der GNU General Public veröffentlicht
Lizenz (GPL) !
Sie verstehen jetzt wahrscheinlich, warum wir anrufen UPX das "letzte"ausführbarer Packer.
BEFEHLE
Komprimieren
Dies ist die Standardoperation, z. upx yourfile.exe komprimiert die angegebene Datei
die Befehlszeile.
Dekomprimieren
Alle UPX Unterstützte Dateiformate können mit entpackt werden -d Schalter, z. upx -d
yourfile.exe dekomprimiert die gerade komprimierte Datei.
Test
Die -t Der Befehl testet die Integrität der komprimierten und unkomprimierten Daten, z. upx -t
yourfile.exe Überprüfen Sie, ob Ihre Datei sicher dekomprimiert werden kann. Beachten Sie, dass dieser Befehl
prüft nicht die gesamte Datei, sondern nur den Teil, der während des Programms dekomprimiert wird
Ausführung. Das bedeutet, dass Sie diesen Befehl nicht anstelle eines Virenprüfprogramms verwenden sollten.
Liste
Die -l Der Befehl gibt einige Informationen zu den komprimierten Dateien aus, die im angegeben sind
Befehlszeile als Parameter, z upx -l yourfile.exe zeigt die komprimierte/unkomprimierte Datei an
Größe und das Komprimierungsverhältnis von yourfile.exe.
OPTIONAL
-q: Sei ruhig, unterdrücke Warnungen
-q -q (oder -qq): Seien Sie sehr leise, unterdrücken Sie Fehler
-q -q -q (oder -qqq): erzeugt überhaupt keine Ausgabe
--help: druckt die Hilfe
--Version: Drucken Sie die Version von UPX
--genau: Beim Komprimieren ist es erforderlich, dass danach eine byteidentische Datei erhalten werden kann
Dekompression mit Option -d. [HINWEIS: Dies ist noch in Arbeit und wird nicht für alle unterstützt
Formate noch nicht. Wenn es Ihnen wichtig ist, können Sie als Workaround Ihre Datei komprimieren und dann dekomprimieren
Programmieren Sie es zum ersten Mal. Alle weiteren Komprimierungs- und Dekomprimierungsschritte sollten dann Byte- ergeben.
Identische Ergebnisse im Vergleich zur ersten dekomprimierten Version.]
[ ...zu schreiben... - Typ `upx --help' zur Zeit ]
KOMPRESSION STUFEN & TUNING
UPX bietet zehn verschiedene Komprimierungsstufen an -1 zu -9 und --Beste. Der Standard
Komprimierungsstufe ist -8 für Dateien, die kleiner als 512 KiB sind, und -7 Andernfalls.
· Die Komprimierungsstufen 1, 2 und 3 sind ziemlich schnell.
· Die Komprimierungsstufen 4, 5 und 6 erzielen eine gute Zeit-/Verhältnisleistung.
· Die Komprimierungsstufen 7, 8 und 9 bevorzugen das Komprimierungsverhältnis gegenüber der Geschwindigkeit.
· Komprimierungsstufe --Beste kann lange dauern.
Beachten Sie die Komprimierungsstufe --Beste kann bei großen Dateien etwas langsam sein, aber Sie
Sie sollten es auf jeden Fall verwenden, wenn Sie eine endgültige Version Ihres Programms veröffentlichen.
Kurzinfo zum Erreichen des besten Komprimierungsverhältnisses:
· Versuchen upx --brutal meinedatei.exe oder upx --ultra-brutal meinedatei.exe.
· Versuchen Sie es --overlay=strip Werke.
· Für Win32/PE-Programme gibt es --strip-relocs=0. Siehe Hinweise unten.
OVERLAY HANDHABUNG OPTIONAL
Info: Ein „Overlay“ bedeutet Hilfsdaten, die nach dem logischen Ende einer ausführbaren Datei angehängt werden.
und es enthält oft anwendungsspezifische Daten (dies ist eine gängige Praxis, um eine zu vermeiden).
zusätzliche Datendatei, obwohl es besser wäre, Ressourcenabschnitte zu verwenden).
UPX behandelt Overlays wie viele andere ausführbare Packer: Es kopiert einfach das Overlay
nach dem komprimierten Bild. Dies funktioniert bei einigen Dateien, bei anderen jedoch nicht.
abhängig davon, wie eine Anwendung tatsächlich auf diese überlagerten Daten zugreift.
--overlay=copy Kopiert alle zusätzlichen Daten, die an die Datei angehängt sind. [STANDARD]
--overlay=strip Entfernen Sie stattdessen alle Overlays aus dem Programm
es kopieren. Seien Sie gewarnt, dies kann zu einer Komprimierung führen
Programmabsturz oder anderweitige Unbrauchbarkeit.
--overlay=skip Weigert sich, Programme zu komprimieren, die ein Overlay haben.
Die Umgebungsvariable UPX kann eine Reihe von Standardoptionen für enthalten UPX. Diese Optionen sind
wird zuerst interpretiert und kann durch explizite Befehlszeilenparameter überschrieben werden. Für
Beispiel:
für DOS/Windows: setze UPX=-9 --compress-icons#0
für sh/ksh/zsh: UPX="-9 --compress-icons=0"; UPX exportieren
für csh/tcsh: setenv UPX "-9 --compress-icons=0"
Unter DOS/Windows müssen Sie beim Setzen der Umgebungsvariablen „#“ statt „=“ verwenden
aufgrund einer COMMAND.COM-Einschränkung.
Nicht alle Optionen sind in der Umgebungsvariablen gültig - UPX werde es dir sagen
Sie können die explizit verwenden --no-env Option zum Ignorieren der Umgebungsvariablen.
ANMERKUNG FÜR UNTERSTÜTZT AUSFÜHRBAR FORMATEN
ANMERKUNG FÜR ATARI/TOS
Dies ist das ausführbare Format, das vom Atari ST/TT, einem auf dem Motorola 68000 basierenden PC, verwendet wird
Computer, der Ende der 80er Jahre beliebt war. Die Unterstützung dieses Formats erfolgt nur aufgrund von
nostalgische Gefühle eines der Autoren und dient keinem praktischen Zweck :-). Sehen
http://www.freemint.de for more info
Gepackte Programme sind nach der Dekomprimierung byte-identisch mit dem Original. Alles debuggen
Die Informationen werden jedoch entfernt.
Für dieses ausführbare Format stehen zusätzliche Optionen zur Verfügung:
--all-methods Komprimieren Sie das Programm mehrmals und verwenden Sie dabei alle
verfügbaren Komprimierungsmethoden. Dies könnte sich verbessern
das Komprimierungsverhältnis in einigen Fällen, aber normalerweise
Die Standardmethode liefert ohnehin die besten Ergebnisse.
ANMERKUNG FÜR BVMLINUZ/I386
Identisch mit vmlinuz/i386.
ANMERKUNG FÜR DOS/COM
Offensichtlich UPX funktioniert nicht mit ausführbaren Dateien, die Daten von sich selbst lesen möchten (wie
einige Befehlszeilen-Dienstprogramme, die im Lieferumfang von Win95/98/ME enthalten sind).
Komprimierte Programme funktionieren nur auf einem 286+.
Gepackte Programme sind nach der Dekomprimierung byte-identisch mit dem Original.
Maximale unkomprimierte Größe: ~65100 Bytes.
Für dieses ausführbare Format stehen zusätzliche Optionen zur Verfügung:
--8086 Erstellen Sie eine ausführbare Datei, die auf jeder 8086-CPU funktioniert.
--all-methods Komprimieren Sie das Programm mehrmals und verwenden Sie dabei alle
verfügbaren Komprimierungsmethoden. Dies könnte sich verbessern
das Komprimierungsverhältnis in einigen Fällen, aber normalerweise
Die Standardmethode liefert ohnehin die besten Ergebnisse.
--all-filters Komprimiert das Programm mehrmals und verwendet dabei alle
verfügbaren Vorverarbeitungsfilter. Dies könnte sich verbessern
das Komprimierungsverhältnis in einigen Fällen, aber normalerweise
Der Standardfilter liefert ohnehin die besten Ergebnisse.
ANMERKUNG FÜR DOS/EXE
dos/exe steht für alle „normalen“ 16-Bit-DOS-Programme.
Offensichtlich UPX funktioniert nicht mit ausführbaren Dateien, die Daten von sich selbst lesen möchten (wie
einige Befehlszeilenprogramme, die im Lieferumfang von Win95/98/ME enthalten sind).
Komprimierte Programme funktionieren nur auf einem 286+.
Für dieses ausführbare Format stehen zusätzliche Optionen zur Verfügung:
--8086 Erstellen Sie eine ausführbare Datei, die auf jeder 8086-CPU funktioniert.
--no-reloc Keine Verschiebungsdatensätze im Exe-Header verwenden.
--all-methods Komprimieren Sie das Programm mehrmals und verwenden Sie dabei alle
verfügbaren Komprimierungsmethoden. Dies könnte sich verbessern
das Komprimierungsverhältnis in einigen Fällen, aber normalerweise
Die Standardmethode liefert ohnehin die besten Ergebnisse.
ANMERKUNG FÜR DOS/SYS
Komprimierte Programme funktionieren nur auf einem 286+.
Gepackte Programme sind nach der Dekomprimierung byte-identisch mit dem Original.
Maximale unkomprimierte Größe: ~65350 Bytes.
Für dieses ausführbare Format stehen zusätzliche Optionen zur Verfügung:
--8086 Erstellen Sie eine ausführbare Datei, die auf jeder 8086-CPU funktioniert.
--all-methods Komprimieren Sie das Programm mehrmals und verwenden Sie dabei alle
verfügbaren Komprimierungsmethoden. Dies könnte sich verbessern
das Komprimierungsverhältnis in einigen Fällen, aber normalerweise
Die Standardmethode liefert ohnehin die besten Ergebnisse.
--all-filters Komprimiert das Programm mehrmals und verwendet dabei alle
verfügbaren Vorverarbeitungsfilter. Dies könnte sich verbessern
das Komprimierungsverhältnis in einigen Fällen, aber normalerweise
Der Standardfilter liefert ohnehin die besten Ergebnisse.
ANMERKUNG FÜR DJGPP2/COFF
Zunächst wird die Verwendung empfohlen UPX *anstatt abstreifen. Streifen hat das ganz Schlimme
Gewohnheit, Ihren Stub durch eine eigene (veraltete) Version zu ersetzen. Zusätzlich UPX korrigiert a
Fehler/Funktion in Strip v2.8.x: Es behebt die 4-KiB-Ausrichtung des Stubs.
UPX beinhaltet die volle Funktionalität von Stubify. Dies bedeutet, dass es automatisch verstopft
Ihre COFF-Dateien. Nutzen Sie die Option --Kaffee um diese Funktionalität zu deaktivieren (siehe unten).
UPX Verarbeitet Allegro-Packdateien automatisch.
Das DLM-Format (eine eher exotische Shared-Library-Erweiterung) wird nicht unterstützt.
Gepackte Programme sind nach der Dekomprimierung byte-identisch mit dem Original. Alles debuggen
Informationen und nachfolgender Müll werden jedoch entfernt.
Für dieses ausführbare Format stehen zusätzliche Optionen zur Verfügung:
--coff Erzeugt eine COFF-Ausgabe anstelle von EXE. Standardmäßig
UPX behält Ihren aktuellen Stub.
--all-methods Komprimieren Sie das Programm mehrmals und verwenden Sie dabei alle
verfügbaren Komprimierungsmethoden. Dies könnte sich verbessern
das Komprimierungsverhältnis in einigen Fällen, aber normalerweise
Die Standardmethode liefert ohnehin die besten Ergebnisse.
--all-filters Komprimiert das Programm mehrmals und verwendet dabei alle
verfügbaren Vorverarbeitungsfilter. Dies könnte sich verbessern
das Komprimierungsverhältnis in einigen Fällen, aber normalerweise
Der Standardfilter liefert ohnehin die besten Ergebnisse.
ANMERKUNG FÜR LINUX [allgemein]
Einleitung
Die Linux/386-Unterstützung in UPX besteht aus drei verschiedenen ausführbaren Formaten:
eine optimiert für ausführbare ELF-Dateien („linux/elf386“), eine optimiert
für Shell-Skripte („linux/sh386“) und ein generisches Format
(„linux/386“).
Wir beginnen zunächst mit einer allgemeinen Diskussion, aber bitte
Lesen Sie auch die relevanten Dokumente für jedes der einzelnen Formate.
Außerdem gibt es spezielle Unterstützung für bootfähige Kernel – siehe
Beschreibung des vmlinuz/386-Formats.
Allgemeine Benutzerübersicht
Beim Ausführen eines komprimierten ausführbaren Programms wird weniger Speicherplatz beansprucht
„permanentes“ Speichermedium (z. B. Festplatte, Diskette,
CD-ROM, Flash-Speicher, EPROM usw.) für mehr Platz in einem oder mehreren
„temporäre“ Speichermedien (wie RAM, Swap Space, / Tmp, Etc.).
Das Ausführen einer komprimierten ausführbaren Datei erfordert außerdem etwas zusätzliche CPU
Zyklen, um die komprimierte ausführbare Datei überhaupt zu generieren,
und es bei jedem Aufruf zu dekomprimieren.
Wie viel Platz wird gehandelt? Es hängt von der ausführbaren Datei ab, aber von vielen
Programme sparen 30 bis 50 % des permanenten Speicherplatzes. Wie viel CPU
Overhead gibt es? Auch hier kommt es auf die ausführbare Datei an, aber
Die Dekomprimierungsgeschwindigkeit beträgt im Allgemeinen mindestens viele Megabyte pro Sekunde.
und wird häufig durch die Geschwindigkeit der zugrunde liegenden Festplatte begrenzt
oder Netzwerk-I/O.
Abhängig von der Nutzungs- und Zugriffsstatistik und der relativen
Geschwindigkeiten von CPU, RAM, Swap Space, / Tmp, und dann Dateisystemspeicher
Das Aufrufen und Ausführen einer komprimierten ausführbaren Datei kann schneller sein als
direktes Ausführen des entsprechenden unkomprimierten Programms.
Das Betriebssystem führt möglicherweise weniger teure E/A-Vorgänge aus
um das komprimierte Programm aufzurufen. Paging zum oder vom Swap-Space
or / Tmp ist möglicherweise schneller als das Auslagern aus dem allgemeinen Dateisystem.
„Mittelgroße“ Programme, die auf etwa 1/3 bis 1/2 ihrer zugreifen
Gespeicherte Programmbytes lassen sich besonders gut komprimieren.
Kleinere Programme profitieren in der Regel nicht so sehr wie die größeren
Die Ersparnis ist geringer. Große Programme profitieren tendenziell nicht proportional
weil jeder Aufruf möglicherweise nur einen kleinen Teil des Programms verwendet,
Dennoch dekomprimiert UPX das gesamte Programm, bevor es aufgerufen wird.
Aber in Umgebungen, in denen der Festplatten- oder Flash-Speicher begrenzt ist,
dann kann die Komprimierung trotzdem gewinnen.
Derzeit teilen sich von UPX komprimierte ausführbare Dateien zur Laufzeit keinen RAM
auf die Art und Weise, wie es ausführbare Dateien tun, die von einem Dateisystem zugeordnet werden. Als ein
Ergebnis, wenn dasselbe Programm gleichzeitig von mehr als einem ausgeführt wird
Prozess, dann erfordert die Verwendung der komprimierten Version mehr RAM und/oder
Swap-Platz. Also Shell-Programme (Bash, CSH usw.) und „make“
sind möglicherweise keine guten Kandidaten für die Komprimierung.
UPX erkennt drei ausführbare Formate für Linux: Linux/elf386,
Linux/sh386 und Linux/386. Linux/386 ist das allgemeinste Format;
Es nimmt jede Datei auf, die ausgeführt werden kann. Zur Laufzeit wird der UPX
Der Dekomprimierungs-Stub wird in neu erstellt / Tmp eine Kopie der Originaldatei,
und dann wird die Kopie mit denselben Argumenten (erneut) ausgeführt.
Ausführbare ELF-Binärdateien bevorzugen standardmäßig das Linux/elf386-Format.
Da UPX sie direkt in den RAM dekomprimiert, wird nur einer verwendet
exec, belegt keinen Platz in / Tmpund verwendet nicht /proc.
Shell-Skripte, bei denen die zugrunde liegende Shell ein „-c“-Argument akzeptiert
kann das Linux/sh386-Format verwenden. UPX dekomprimiert das Shell-Skript
in wenig Speicher, ordnet dann die Shell zu und übergibt den gesamten Text des
script als Argument mit einem führenden „-c“.
Allgemeine Vorteile:
- UPX kann alle ausführbaren Dateien komprimieren, sei es AOUT, ELF, libc4, libc5,
libc6, Shell/Perl/Python/...-Skripte, eigenständige Java-Klasse
Binärdateien oder was auch immer ...
Alle Skripte und Programme funktionieren wie zuvor.
- Komprimierte Programme sind völlig eigenständig. Kein Bedarf für
irgendein externes Programm.
- UPX lässt Ihr Originalprogramm unberührt. Das bedeutet, dass
nach der Dekomprimierung erhalten Sie eine byteidentische Version,
und Sie können UPX genau wie gzip als Dateikomprimierer verwenden.
[ Beachten Sie, dass UPX intern eine Prüfsumme der Datei verwaltet.
Es handelt sich also tatsächlich um eine zuverlässige Alternative. ]
- Da der Stub nur Systemaufrufe verwendet und nicht mit libc verknüpft ist
sollte unter jeder Linux-Konfiguration laufen, die ELF ausführen kann
Binärdateien.
- Aus dem gleichen Grund sollten komprimierte ausführbare Dateien unter ausgeführt werden
FreeBSD und andere Systeme, auf denen Linux-Binärdateien ausgeführt werden können.
[Bitte senden Sie Feedback zu diesem Thema]
Allgemeine Nachteile:
- Es ist nicht ratsam, Programme zu komprimieren, die normalerweise viele Dateien enthalten
Instanzen, die ausgeführt werden (wie „sh“ oder „make“), weil die gemeinsamen Segmente von
Komprimierte Programme werden nicht mehr zwischen verschiedenen Benutzern geteilt
Prozesse.
- „ldd“ und „size“ zeigen nichts Nützliches an, da sie alle vorhanden sind
siehe ist der statisch verknüpfte Stub. Seit Version 0.82 der Abschnitt
Header werden aus dem UPX-Stub entfernt und „size“ nicht einmal
Erkennen Sie das Dateiformat. Die Datei patches/patch-elfcode.h hat eine
Patch zur Behebung dieses Fehlers in „size“ und anderen Programmen, die GNU BFD verwenden.
Allgemeine Hinweise:
- Da UPX Ihr ursprüngliches Programm unberührt lässt, ist es von Vorteil
um es vor der Komprimierung zu entfernen.
- Wenn Sie ein Skript komprimieren, verlieren Sie die Plattformunabhängigkeit -
Dies könnte ein Problem sein, wenn Sie NFS-gemountete Festplatten verwenden.
- Die Komprimierung von Suid-, Guid- und Sticky-Bit-Programmen wird abgelehnt
wegen möglicher Auswirkungen auf die Sicherheit.
- Aus dem gleichen Grund macht es keinen Sinn, etwas Komprimiertes zu machen
Programm suid.
- Offensichtlich funktioniert UPX nicht mit ausführbaren Dateien, die Daten lesen möchten
von sich selbst. Dies könnte beispielsweise ein Problem für Perl-Skripte sein
die auf ihre __DATA__-Leitungen zugreifen.
- Bei internen Fehlern wird der Stub mit Exitcode 127 abgebrochen.
Typische Gründe dafür sind, dass das Programm irgendwie funktioniert
nach der Komprimierung geändert wurden.
Wenn Sie „strace -o strace.log compress_file“ ausführen, erfahren Sie mehr.
ANMERKUNG FÜR LINUX/ELF386
Bitte lesen Sie zunächst die allgemeine Linux-Beschreibung.
Das Linux/elf386-Format wird direkt in den RAM dekomprimiert, verwendet nur eine Exec und wird nicht verwendet
Raum in / Tmpund verwendet nicht /proc.
Linux/elf386 wird automatisch für ausführbare Linux ELF-Dateien ausgewählt.
Gepackte Programme sind nach der Dekomprimierung byte-identisch mit dem Original.
Wie es funktioniert:
Für ausführbare ELF-Dateien dekomprimiert UPX direkt in den Speicher und simuliert so
die Zuordnung, die der Betriebssystemkernel während exec() verwendet,
einschließlich des PT_INTERP-Programminterpreters (falls vorhanden).
Das brk() wird durch ein spezielles PT_LOAD-Segment in der komprimierten Datei festgelegt
selbst ausführbar. UPX löscht dann den Stapel bis auf
Argumente, Umgebungsvariablen und Elf_auxv-Einträge (dies ist
erforderlich aufgrund von Fehlern im Startcode von /lib/ld-linux.so ab
Mai 2000) und übergibt die Kontrolle an den Programminterpreter bzw
die e_entry-Adresse der ursprünglichen ausführbaren Datei.
Der UPX-Stub ist etwa 1700 Bytes lang und teilweise in Assembler geschrieben
und verwendet nur Kernel-Systemaufrufe. Es ist nicht mit einer libc verknüpft.
Spezifische Nachteile:
- Für die Formate Linux/elf386 und Linux/sh386 werden Sie sich darauf verlassen
RAM und Auslagerungsspeicher, um das gesamte dekomprimierte Programm zu speichern
die Lebensdauer des Prozesses. Wenn Sie den Großteil Ihres Swaps bereits nutzen
Platz, dann kann es sein, dass Ihnen der Platz ausgeht. Ein System, das nicht über genügend Speicher verfügt
kann brüchig werden. Viele Programme reagieren nicht ordnungsgemäß, wenn
malloc() gibt 0 zurück. Bei neueren Linux-Kerneln ist der Kernel
kann beschließen, einige Prozesse abzubrechen, um Speicher und Sie zurückzugewinnen
Möglicherweise gefällt Ihnen die Wahl des Kernels, welchen Kernel er töten soll, nicht. Betrieb
/usr/bin/top ist eine Möglichkeit, die Nutzung des Swap-Speicherplatzes zu überprüfen.
Für dieses ausführbare Format stehen zusätzliche Optionen zur Verfügung:
(Keine)
ANMERKUNG FÜR LINUX/SH386
Bitte lesen Sie zunächst die allgemeine Linux-Beschreibung.
Shell-Skripte, bei denen die zugrunde liegende Shell ein „-c“-Argument akzeptiert, können Linux/sh386 verwenden
Format. UPX Dekomprimiert das Shell-Skript in wenig Speicher, ordnet dann die Shell zu und übergibt
den gesamten Text des Skripts als Argument mit einem führenden „-c“. Es verbraucht keinen Platz
in / Tmpund verwendet nicht /proc.
Linux/sh386 wird automatisch für Shell-Skripte ausgewählt, die eine bekannte Shell verwenden.
Gepackte Programme sind nach der Dekomprimierung byte-identisch mit dem Original.
Wie es funktioniert:
Für ausführbare Shell-Skriptdateien (Dateien, die mit „#!/“ oder „#! /“ beginnen)
wobei die Shell bekanntermaßen „-c“ akzeptiert ", UPX dekomprimiert
Die Datei wird in wenig Speicher verschoben und dann die Shell (und ihr PT_INTERP) zugeordnet.
und übergibt die Kontrolle mit der gesamten dekomprimierten Datei an die Shell
als Argument nach „-c“. Bekannte Shells sind sh, ash, bash, bsh, csh,
ksh, tcsh, pdksh. Einschränkung: UPX kann diese Methode nicht verwenden
für Shell-Skripte, die das eine optionale String-Argument danach verwenden
der Shell-Name im Skript (Beispiel: „#! / Bin / sh option3\n".)
Der UPX-Stub ist etwa 1700 Bytes lang und teilweise in Assembler geschrieben
und verwendet nur Kernel-Systemaufrufe. Es ist nicht mit einer libc verknüpft.
Spezifische Nachteile:
- Für die Formate Linux/elf386 und Linux/sh386 werden Sie sich darauf verlassen
RAM und Auslagerungsspeicher, um das gesamte dekomprimierte Programm zu speichern
die Lebensdauer des Prozesses. Wenn Sie den Großteil Ihres Swaps bereits nutzen
Platz, dann kann es sein, dass Ihnen der Platz ausgeht. Ein System, das nicht über genügend Speicher verfügt
kann brüchig werden. Viele Programme reagieren nicht ordnungsgemäß, wenn
malloc() gibt 0 zurück. Bei neueren Linux-Kerneln ist der Kernel
kann beschließen, einige Prozesse abzubrechen, um Speicher und Sie zurückzugewinnen
Möglicherweise gefällt Ihnen die Wahl des Kernels, welchen Kernel er töten soll, nicht. Betrieb
/usr/bin/top ist eine Möglichkeit, die Nutzung des Swap-Speicherplatzes zu überprüfen.
Für dieses ausführbare Format stehen zusätzliche Optionen zur Verfügung:
(Keine)
ANMERKUNG FÜR LINUX/386
Bitte lesen Sie zunächst die allgemeine Linux-Beschreibung.
Das generische Linux/386-Format wird in dekomprimiert / Tmp und Bedürfnisse / proc Dateisystemunterstützung. Es
startet das dekomprimierte Programm über die execve() Systemaufruf.
Linux/386 wird nur ausgewählt, wenn die spezialisierten Programme linux/elf386 und linux/sh386 nicht erkannt werden
eine Datei.
Gepackte Programme sind nach der Dekomprimierung byte-identisch mit dem Original.
Wie es funktioniert:
Für Dateien, die nicht ELF sind und kein Skript für eine bekannte „-c“-Shell sind,
UPX verwendet Kernel execve(), das zunächst in a dekomprimiert werden muss
temporäre Datei im Dateisystem. Interessanterweise -
wegen der guten Speicherverwaltung des Linux-Kernels - this
führt oft nicht zu einer merklichen Verzögerung, und das ist tatsächlich der Fall
Es erfolgt überhaupt kein Zugriff auf die Festplatte, wenn Sie über genügend freien Speicher verfügen
Der gesamte Prozess findet innerhalb der Dateisystempuffer statt.
Eine komprimierte ausführbare Datei besteht aus dem UPX-Stub und einem Overlay
welches das Originalprogramm in komprimierter Form enthält.
Der UPX-Stub ist eine statisch verknüpfte ausführbare ELF-Datei und tut dies auch
Folgendes beim Programmstart:
1) Dekomprimieren Sie das Overlay an einen temporären Speicherort in / Tmp
2) Öffnen Sie die temporäre Datei zum Lesen
3) Versuchen Sie, die temporäre Datei zu löschen und zu starten (execve)
das unkomprimierte Programm in / Tmp Verwendung von / proc //fd/X als
erreicht durch Schritt 2)
4) Wenn dies fehlschlägt, teilen Sie einen Unterprozess zum Bereinigen auf und
Starten Sie das Programm in / Tmp in der Zwischenzeit
Der UPX-Stub ist etwa 1700 Bytes lang und teilweise in Assembler geschrieben
und verwendet nur Kernel-Systemaufrufe. Es ist nicht mit einer libc verknüpft.
Spezifische Nachteile:
- Sie benötigen zusätzlichen freien Speicherplatz für das unkomprimierte Programm
in Ihrem / Tmp Verzeichnis. Dieses Programm wird unmittelbar danach gelöscht
Dekomprimierung, aber Sie benötigen es trotzdem für die gesamte Ausführungszeit
des Programms.
- Du musst haben / proc Dateisystemunterstützung, wenn der Stub geöffnet werden soll
/ proc //exe und braucht / proc //fd/X. Das bedeutet auch, dass Sie
Programme, die während der Startsequenz verwendet werden, können nicht komprimiert werden
bevor / proc montiert.
- Dienstprogramme wie „top“ zeigen dabei numerische Werte an
Namensfeld. Dies liegt daran, dass Linux den Prozessnamen aus berechnet
das erste Argument des letzten execve-Systemaufrufs (was normalerweise der Fall ist).
etwas wie / proc //fd/3).
- Aufgrund der vorübergehenden Dekomprimierung auf der Festplatte verringert sich die Dekomprimierungsgeschwindigkeit
ist nicht so schnell wie bei den anderen ausführbaren Formaten. Trotzdem kann ich sehen
Keine merkliche Verzögerung beim Starten von Programmen wie meinen ~3-MiB-Emacs (die
ist im komprimierten Zustand weniger als 1 MiB groß :-).
Für dieses ausführbare Format stehen zusätzliche Optionen zur Verfügung:
--force-execve Erzwingt die Verwendung des generischen Linux/386 „execve“
Format, dh versuchen Sie es nicht mit Linux/elf386 und
Linux/SH386-Formate.
ANMERKUNG FÜR PS1/EXE
Dies ist das ausführbare Format, das von der Sony PlayStation (PSone) verwendet wird, die auf dem Mips R3000 basiert
Spielekonsole, die seit Ende der 90er Jahre beliebt ist. Die Unterstützung dieses Formats ist sehr groß
ähnlich dem Atari-Modell, aufgrund der nostalgischen Gefühle eines der Autoren.
Gepackte Programme sind nach der Dekomprimierung bis auf Weiteres byte-identisch mit dem Original
bemerken.
Maximale unkomprimierte Größe: ~1.89 / ~7.60 MiB.
Anmerkungen:
- UPX erstellt standardmäßig eine geeignete ausführbare Datei für das CD-Mastering
und Konsolenübertragung. Für eine ausführbare Hauptdatei von CD-Master können Sie es auch versuchen
die spezielle Option „--boot-only“, wie unten beschrieben.
Es wurde berichtet, dass UpX-gepackte ausführbare Dateien vollständig kompatibel sind mit
die Sony PlayStation 2 (PS2, PStwo) und Sony PlayStation Portable (PSP).
Sony PlayStation (PSone)-Emulationsmodus.
- Normalerweise belegen die gepackten Dateien die gleichen Speicherbereiche wie die unkomprimierten
Versionen, sodass sie beim Entpacken keine anderen Speicherbereiche überschreiben.
Wenn dies nicht möglich ist, bricht UPX ab und zeigt eine „Überlappung gepackter Daten“ an.
Fehler. Mit der Option „--force“ verschiebt UPX die Ladeadresse
für die gepackte Datei, aber das ist kein wirkliches Problem, wenn es sich um eine einzelne oder handelt
die wichtigste ausführbare Datei.
Für dieses ausführbare Format stehen zusätzliche Optionen zur Verfügung:
--all-methods Komprimieren Sie das Programm mehrmals und verwenden Sie dabei alle
verfügbaren Komprimierungsmethoden. Dies könnte sich verbessern
das Komprimierungsverhältnis in einigen Fällen, aber normalerweise
Die Standardmethode liefert ohnehin die besten Ergebnisse.
--8-bit Verwendet 8-Bit-Größenkomprimierung [Standard: 32 Bit]
--8mib-ram PSone verfügt über 8 MiB RAM verfügbar [Standard: 2 MiB]
--boot-only Dieses Format ist nur für Haupt-Exes und CD-Mastering!
Es kann das Komprimierungsverhältnis leicht verbessern,
Dekomprimierungsroutinen sind schneller als Standardroutinen.
Es kann jedoch nicht für die Konsolenübertragung verwendet werden!
--no-align Diese Option deaktiviert das Datensektorformat im CD-Modus 2
Ausrichtung. Kann das Kompressionsverhältnis leicht verbessern,
aber die komprimierte ausführbare Datei startet nicht von einer CD.
Verwenden Sie es nur für die Konsolenübertragung!
ANMERKUNG FÜR RTM32/PE und ARM/PE
Dasselbe wie win32/pe.
ANMERKUNG FÜR TMT/ADAM
Dieses Format wird vom TMT Pascal-Compiler verwendet – siehe http://www.tmt.com/ .
Für dieses ausführbare Format stehen zusätzliche Optionen zur Verfügung:
--all-methods Komprimieren Sie das Programm mehrmals und verwenden Sie dabei alle
verfügbaren Komprimierungsmethoden. Dies könnte sich verbessern
das Komprimierungsverhältnis in einigen Fällen, aber normalerweise
Die Standardmethode liefert ohnehin die besten Ergebnisse.
--all-filters Komprimiert das Programm mehrmals und verwendet dabei alle
verfügbaren Vorverarbeitungsfilter. Dies könnte sich verbessern
das Komprimierungsverhältnis in einigen Fällen, aber normalerweise
Der Standardfilter liefert ohnehin die besten Ergebnisse.
ANMERKUNG FÜR VMLINUZ/386
Die Formate vmlinuz/386 und bvmlinuz/386 benötigen einen gzip-komprimierten bootfähigen Linux-Kernel
Bild („vmlinuz“, „zImage“, „bzImage“), dekomprimieren Sie es mit gzip und komprimieren Sie es erneut mit dem UPX
Kompressionsverfahren.
vmlinuz/386 hat überhaupt nichts mit den anderen ausführbaren Linux-Formaten zu tun, und das ist auch nicht der Fall
Teilen Sie alle ihre Nachteile.
Anmerkungen:
- Stellen Sie sicher, dass „vmlinuz/386“ oder „bvmlinuz/386“ angezeigt wird
beim Komprimieren - andernfalls ein falsches ausführbares Format
Möglicherweise wurde verwendet und der Kernel startet nicht.
Vorteile:
- Bessere Komprimierung (beachten Sie jedoch, dass der Kernel bereits komprimiert war,
daher ist die Verbesserung nicht so groß wie bei anderen Formaten).
Dennoch können die eingesparten Bytes für besondere Anforderungen wie z. B. unerlässlich sein
Bootdisketten.
Das ist zum Beispiel das, was ich für meinen 2.2.16-Kernel bekomme:
1589708 vmlinux
641073 bzImage [Original]
560755 bzImage.upx [komprimiert mit „upx -9“]
- Viel schnellere Dekomprimierung beim Kernel-Boot (aber Kernel
Dekompressionsgeschwindigkeit ist heutzutage kein wirkliches Problem mehr).
Nachteile:
(Keine)
Für dieses ausführbare Format stehen zusätzliche Optionen zur Verfügung:
--all-methods Komprimieren Sie das Programm mehrmals und verwenden Sie dabei alle
verfügbaren Komprimierungsmethoden. Dies könnte sich verbessern
das Komprimierungsverhältnis in einigen Fällen, aber normalerweise
Die Standardmethode liefert ohnehin die besten Ergebnisse.
--all-filters Komprimiert das Programm mehrmals und verwendet dabei alle
verfügbaren Vorverarbeitungsfilter. Dies könnte sich verbessern
das Komprimierungsverhältnis in einigen Fällen, aber normalerweise
Der Standardfilter liefert ohnehin die besten Ergebnisse.
ANMERKUNG FÜR WATCOM/LE
UPX wurde mit folgenden Extendern erfolgreich getestet:
DOS4G, DOS4GW, PMODE/W, DOS32a, CauseWay.
Der WDOS/X-Extender wird teilweise unterstützt (für Details).
siehe die Datei Bugs BUGS).
DLLs und das LX-Format werden nicht unterstützt.
Für dieses ausführbare Format stehen zusätzliche Optionen zur Verfügung:
--le Erzeugt stattdessen eine ungebundene LE-Ausgabe
Den aktuellen Stub behalten.
ANMERKUNG FÜR WIN32/PE
Die PE-Unterstützung in UPX ist jetzt recht stabil, aber wahrscheinlich gibt es noch welche
Inkompatibilitäten mit einigen Dateien.
Wegen des Weges UPX (und andere Packer für dieses Format) funktioniert, können Sie sehen, erhöht
Speicherverbrauch Ihrer komprimierten Dateien, da das gesamte Programm in den Speicher geladen wird
Start-up. Wenn Sie mehrere Instanzen großer komprimierter Programme starten, verschwenden Sie Speicher
weil die gemeinsamen Segmente des Programms nicht von allen Instanzen gemeinsam genutzt werden. Auf der
Andererseits, wenn Sie nur kleinere Programme komprimieren oder nur eine Instanz davon ausführen
Bei größeren Programmen ist dieser Nachteil geringer, aber er ist immer noch da.
Wenn Sie ausführbare Dateien über das Netzwerk ausführen, werden komprimierte Programme schneller geladen und
erfordern während der Ausführung weniger Bandbreite.
DLLs werden unterstützt. UPX-komprimierte DLLs können jedoch keine gemeinsamen Daten und Codes gemeinsam nutzen
wurde von mehreren Anwendungen verwendet. Das Komprimieren von msvcrt.dll ist also eine Verschwendung von Speicher, aber
Das Komprimieren der DLL-Plugins einer bestimmten Anwendung ist möglicherweise eine bessere Idee.
Bildschirmschoner werden unterstützt, mit der Einschränkung, dass der Dateiname mit „.scr“ enden muss.
(da Bildschirmschoner etwas anders gehandhabt werden als normale Exe-Dateien).
UPX-komprimierte PE-Dateien haben einen geringen Speicheraufwand (normalerweise im Bereich von 10 bis 30 KiB).
Dies kann durch Angabe des Befehlszeilenschalters „-i“ während der Komprimierung angezeigt werden.
Für dieses ausführbare Format stehen zusätzliche Optionen zur Verfügung:
--compress-exports=0 Den Exportabschnitt nicht komprimieren.
Verwenden Sie diese Option, wenn Sie die komprimierte Version ausführen möchten
Programm unter Wine.
--compress-exports=1 Komprimieren Sie den Exportabschnitt. [STANDARD]
Durch die Komprimierung des Exportabschnitts kann dies verbessert werden
Das Komprimierungsverhältnis ist ziemlich hoch, funktioniert aber möglicherweise nicht
mit allen Programmen (wie winword.exe).
UPX komprimiert niemals den Exportabschnitt einer DLL
unabhängig von dieser Option.
--compress-icons=0 Komprimiert keine Symbole.
--compress-icons=1 Komprimiert alle bis auf das erste Symbol.
--compress-icons=2 Komprimiert alle Symbole, die nicht im enthalten sind
erstes Symbolverzeichnis. [STANDARD]
--compress-icons=3 Alle Symbole komprimieren.
--compress-resources=0 Komprimiert überhaupt keine Ressourcen.
--keep-resource=list Komprimiert die in der Liste angegebenen Ressourcen nicht.
Die Mitglieder der Liste werden durch Kommas getrennt.
Ein Listenmitglied hat das folgende Format: I .
ICH ist der Typ der Ressource. Standardtypen
müssen als Dezimalzahlen angegeben werden, Benutzertypen können sein
durch dezimale IDs oder Zeichenfolgen angegeben. ICH ist der
Bezeichner der Ressource. Es kann eine Dezimalzahl sein
oder eine Zeichenfolge. Zum Beispiel:
--keep-resource=2/MYBITMAP,5,6/12345
UPX komprimiert die benannte Bitmap-Ressource „MYBITMAP“ nicht.
Es lässt jede Dialogressource (5) unkomprimiert und
Die Zeichenfolgentabellenressource mit der Kennung wird nicht berührt
12345
--force Komprimierung erzwingen, auch wenn eine vorhanden ist
unerwarteter Wert in einem Header-Feld.
Mit Vorsicht verwenden.
--strip-relocs=0 Umzugsdatensätze werden nicht entfernt.
--strip-relocs=1 Umzugsdatensätze entfernen. [STANDARD]
Diese Option funktioniert nur bei ausführbaren Dateien mit Basis
Adresse größer oder gleich 0x400000. Normalerweise die
komprimierte Dateien werden kleiner, aber einige Dateien
kann größer werden. Beachten Sie, dass die resultierende Datei
Funktioniert nicht unter Windows 3.x (Win32s).
UPX entfernt niemals Verschiebungen von einer DLL
unabhängig von dieser Option.
--all-methods Komprimieren Sie das Programm mehrmals und verwenden Sie dabei alle
verfügbaren Komprimierungsmethoden. Dies könnte sich verbessern
das Komprimierungsverhältnis in einigen Fällen, aber normalerweise
Die Standardmethode liefert ohnehin die besten Ergebnisse.
--all-filters Komprimiert das Programm mehrmals und verwendet dabei alle
verfügbaren Vorverarbeitungsfilter. Dies könnte sich verbessern
das Komprimierungsverhältnis in einigen Fällen, aber normalerweise
Der Standardfilter liefert ohnehin die besten Ergebnisse.
DIAGNOSE
Der Exit-Status ist normalerweise 0; Wenn ein Fehler auftritt, ist der Exit-Status 1. Wenn eine Warnung auftritt, wird der Exit-Status beendet
Status ist 2.
UPXDie Diagnose ist selbsterklärend.
Nutzen Sie upx-ucl online über die Dienste von onworks.net