| |
|
|
Georg Teles | Guten Tag,
anbei ein Problem bei UPX und möglicher Workaround Dank Rolands Art und Weise der Kompilate, wie diese in der EXE gesucht werden
Beim Linken der mit UPX zuvor komprimierten Runtime kommt folgender Fehler beim fertigen Programm
Es liegt daran, dass das fertige Kompilat an die EXE als Ressource angehängt wird (X4 hier) - da restliche Ressourcen bereits komprimiert sind, wird die EXE beim Ausführen dekomprimiert und versucht ergo das nicht kompimierte Kompilat zu dekomprimieren, was zu dem Fehler kommt - folgende Gründe liegen vor:
1. in erster Linier sucht das Runtime nach dem Kompilat, dieses darf in keinster Weise komprimiert sein - bedeutet, dass im Nachgang durch UPX zB komprimiertes Programm auch das Kompilat, das als Ressource vorhanden ist, komprimiert wird
2. wie oben erklärt, werden die Ressourcen beim Ausführen dekomprimiert - selbst wenn das Kompilat im Nachgang gelinkt wurde und die EXE zuvor komprimiert, kommt es ebenfalls zum o.g. Fehler. Hier wage ich zu vermuten, dass das Kompilat durch die EXE dekomprimiert wird (weil UPX Befehl = Ressourcen komprmiert, also dekomprimiere) obwohl das Kompilat sich im Original befindet
um dennoch mit UPX komprimierter Runtime zu arbeiten:
1. Lösung: Fertiges Programm komprimieren und den Befehl --compress-resources=0 verwenden - wie der Befehl schon sagt, werden die Ressourcen von der Komprimierung ausgenommen
2. Lösung: da das Kompilat durch Rolands Art und Weise, wie dieses durch die Runtime gesucht wird nicht zwangsläufig eine Ressource sein muss, kann zunächst die Runtime komprimiert werden (auch alle Ressourcen), danach die PRF gelinkt und einfach an die Runtime am Ende angehängt werden - hierzu auch den Befehl PROGEND am Ende des Quellcodes zur Sicherheit verwenden. TIPP hier: Durch den Befehl --compress-icons=1 bei UPX sollte das erste Icon, dass man auch mit "USEICON" (bzw. Create("hIcon",...) als Fenstericon verwenden will, nicht komprimiert werden (wird bei mir in beiden Fällen nicht geladen - komprimierte Bitmaps, Strings etc. werden problemlos geladen).
Für die 2. Lösung in diesem Sinne habe ich parallel aus dem Jahr 2013 ein Programm hochgeladen, falls jemand das nicht selbst manuell machen möchte: [...] |
|
|
| |
|
|