AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

UPX-Packer ja oder nein?

Ein Thema von a.def · begonnen am 1. Mai 2017 · letzter Beitrag vom 5. Mai 2017
Antwort Antwort
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

AW: UPX-Packer ja oder nein?

  Alt 2. Mai 2017, 12:52
Ich habe das mal mit unserer Anwendung getestet und da ist der Unterschied deutlich zu sehen:


Ungepackt (exe 47 MB)
Max. Arbeitssatz (Speicher): 104.468K
Arbeitsspeicher (privater Arbeitssatz): 61.520K

Mit UPX gepackt (exe 18 MB)
Max. Arbeitssatz (Speicher): 137.900K
Arbeitsspeicher (privater Arbeitssatz): : 107.880K
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#2

AW: UPX-Packer ja oder nein?

  Alt 2. Mai 2017, 13:16
Also ist da doch ein Unterschied was den Arbeitsspeicher angeht welcher nicht vernachlässigbar ist.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

AW: UPX-Packer ja oder nein?

  Alt 2. Mai 2017, 13:30
Interessant, da scheint es ja dann auch Abhängigkeiten von Programm zu Programm geben.

Bei meinen Programmen ist mir sowas bisher noch nicht aufgefallen, allerdings nutze ich UPX auch nicht mehr wirklich.

Es war interessant, als USB-Sticks noch nicht im GB-Bereich waren und vor allem zu Zeiten, als Disketten durchaus noch ein üblicher Datenträger für Rettungssysteme waren.

Aber das passt dann wohl doch besser zu diesem Thema: http://www.delphipraxis.net/192506-m...wird-wenn.html
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.662 Beiträge
 
Delphi 12 Athens
 
#4

AW: UPX-Packer ja oder nein?

  Alt 2. Mai 2017, 13:37
Also ist da doch ein Unterschied was den Arbeitsspeicher angeht welcher nicht vernachlässigbar ist.
Diese Frage bei StackOverflow gibt, trotz immer noch fehlender Antworten, einen Einblick in die dahinter steckende Komplexität: Size of exe file vs available memory

Demnach müsste der Effekt z.B. schon unterschiedlich sein, je nachdem ob Debug-Info in der EXE enthalten ist oder nicht.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.385 Beiträge
 
Delphi 12 Athens
 
#5

AW: UPX-Packer ja oder nein?

  Alt 2. Mai 2017, 13:38
EXE/DLL/BPL sind standardmäßig als MMF mit CopyOnWrite in den Arbeitsspeicher gemapt. (jede der benötigten PE-Sectionen hintereinander)

Sie können also ausgelagert werden und belegen im Prozess nur den virtuellen Speicher, aber im realen Speicher sind sie vernachlässigbar.
Erst wenn ein Prozess an den gemapten Daten im RAM was ändert, bekommt er für jeweils den umgebenen 4KB-Block eine eigene Kopie.

Außerdem können mehrere Prozesse den selben "realen" Speicher verwenden, wenn sie Teile des gleichen Images verwenden.
Stell dir mal vor jeder der 10000 aktiven Prozesse müsste seine eigenen Kopieen der System-DLLs in den Speicher laden.
Bei nur 1000 Prozessen wären das alleine 1,5 GB für die ntdll.dll .
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 2. Mai 2017 um 13:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.968 Beiträge
 
Delphi 12 Athens
 
#6

AW: UPX-Packer ja oder nein?

  Alt 2. Mai 2017, 13:42
Außerdem können mehrere Prozesse den selben "realen" Speicher verwenden, wenn sie Teile des gleichen Images verwenden.
Und wenn die Exe bzw. DLL nicht mit UPX gepackt ist. Ansonsten würde jedesmal ein neuer Speicherbereich reserviert werden...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.385 Beiträge
 
Delphi 12 Athens
 
#7

AW: UPX-Packer ja oder nein?

  Alt 2. Mai 2017, 13:47
Jupp, UND.

Bei UPX wird der Speicher vom Loader reserviert, beschrieben und Windows weiß nichts davon, selbst wenn ein anderes Programm das gleiche macht.
Sowas wie UPX könnte man ja nicht nur auf die EXE, sondern auch auf DLLs anwenden.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: UPX-Packer ja oder nein?

  Alt 2. Mai 2017, 14:01
Wenn der Entwickler von Delphi in der Lage wäre vernünftige Kompilate zu erstellen bräuchte man so etwas, UPX oder vergleichbare Packer überhaupt nicht.
Das man unnötige Dinge in einer EXE komprimieren bzw. erst gar nicht einbinden muss beweisen unter anderem ResourceHacker und UPX.

Der gleiche Code in D6 und letztendlich Kompiliert mit der letzten Delphi Version sind vom Größen Unterschied schon beträchtlich.
Aber gut das hatten wir im anderen Thread schon diskutiert.

[IronieOn]Aber wir wissen ja alle Delphi ist perfekt. LOL.[/IronieOff]

gruss

Geändert von EWeiss ( 2. Mai 2017 um 14:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.385 Beiträge
 
Delphi 12 Athens
 
#9

AW: UPX-Packer ja oder nein?

  Alt 2. Mai 2017, 14:17
Komisch, wenn ich UPX auf ein perfektes C++-Kompilat los lasse, dann wird das auch Kleiner.

Gut, .NET und VisualBasic-Programme sind ja auch viel kleiner. (wenn man die Laufzeitbibliotheken ignoriert)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.968 Beiträge
 
Delphi 12 Athens
 
#10

AW: UPX-Packer ja oder nein?

  Alt 2. Mai 2017, 14:26
Wenn der Entwickler von Delphi in der Lage wäre vernünftige Kompilate zu erstellen bräuchte man so etwas, UPX oder vergleichbare Packer überhaupt nicht.
Das man unnötige Dinge in einer EXE komprimieren bzw. erst gar nicht einbinden muss beweisen unter anderem ResourceHacker und UPX.
Das widerspricht aber eben der Funktionsweise von Windows. Unter Windows werden DLLs von Windows automatisch in Speicherbereiche der Exen, die sie laden, eingeblendet, damit sie nicht mehrfach im Speicher liegen müssen, so wie himitsu schon geschrieben hat. Wenn Delphi selbst das durch Komprimieren umgehen würde, wäre das ein Nogo, weil das den Arbeitsspeicher vollmüllen würde sobald eine solche Anwendung mehrfach läuft usw.

Zudem ist es eben auch hoch bedenklich, wenn eine Anwendung Speicher schreibt und den dann ausführbar macht. Es ist schon absolut korrekt, wenn solche Anwendungen erst einmal verdächtig sind.

Vernünftig hat jedenfalls nichts mit ultraklein zu tun, weil das für 99% der Fälle nicht relevant ist. Und unnötig sind die Daten ja nicht, die werden ja durchaus verwendet. Nur eben nicht durch jeden.
Deshalb wäre es durchaus wünschenswert, wenn man die RTTI Informationen z.B. komplett herauslassen könnte usw.
Wenn dann die Anwendung auch nicht mehr wie gewünscht funktioniert, wäre das ja egal, weil das ja durch den Entwickler so eingestellt wurde.
Aber ob das wirklich wichtiger als Bugfixes und neue Features ist... sehe ich zumindest nicht so.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz