1 Punkte von GN⁺ 2023-07-10 | 1 Kommentare | Auf WhatsApp teilen
  • Durch die Untersuchung der Grenzen des .NET-Moduldateiformats erstellt der Autor die kleinstmögliche ausführbare Datei, die "Hello, World!" auf der Standardausgabe ausgibt.
  • Für das Experiment legt der Autor willkürliche Regeln fest: Es wird ein verwalteter Einstiegspunkt verwendet, der in C# oder CIL implementiert ist, die Datei läuft auf .NET Framework 4.x.x und hat keine Abhängigkeiten von Drittanbietern.
  • Um die Größe der ausführbaren Datei schrittweise zu verringern, werden Nullable-Reference-Annotations deaktiviert, das .NET-Modul manuell geschrieben, Imports und Base Relocations entfernt, unnötige Metadaten gestrichen und die Verwendung von ASCII-Zeichenfolgen optimiert.
  • Das Endergebnis ist eine 889 Byte große ausführbare Datei, die die theoretisch mögliche Mindestgröße einer gültigen .NET-PE-Datei erreicht.
  • Der Artikel liefert Codebeispiele und Erklärungen zu jedem Schritt, der zur Verringerung der Dateigröße durchgeführt wurde.
  • Der Autor betont, wie wichtig es ist, Dateiformate zu verstehen und strategische Entscheidungen zur Optimierung der Größe ausführbarer Dateien zu treffen.
  • Durch das Verschieben der Zeichenfolge in ein ungenutztes Padding-Segment wird die Datei um 13 Byte kleiner.
  • Durch das Entfernen der Referenz auf mscorlib lässt sich Platz in der Binärdatei sparen.
  • Das Kürzen des VersionString im .NET-Metadatenverzeichnis spart weitere Bytes.
  • Die endgültige Größe der Binärdatei beträgt 834 Byte und lässt sich komprimiert weiter auf 476 Byte reduzieren.
  • Obwohl es sich um ein sinnfreies Projekt handelt, kann es Spaß machen, die Grenzen bestehender Systeme auszuloten.
  • Der Autor stellt den vollständigen Quellcode auf GitHub als Referenz bereit.
  • Der Artikel behandelt Reverse Engineering, Code Golf und die Optimierung von PE-Dateien.
  • Der Autor teilt seine Erfahrungen und ermutigt zu weiterer Erforschung zusätzlicher Möglichkeiten zur Reduzierung der Dateigröße.
  • Dieser Artikel ist vom Autor unter CC BY 4.0 lizenziert.

1 Kommentare

 
GN⁺ 2023-07-10
Hacker-News-Kommentare
  • Michal Strehovský hat mit .NET ein Snake-Spiel mit weniger als 8 KB erstellt.
  • Dieser Artikel kann Menschen verwirren, weil die ausführbare Datei eine auf dem System installierte Runtime benötigt.
  • Eine verlässliche Quelle für echte ausführbare Dateien sind Native-AOT-Binärdateien.
  • Der Standort des Autors, die McMurdo-Station in der Antarktis, ist interessant.
  • Die Dateigröße wird größer, weil die Abschnittsausrichtung 0x200 Byte beträgt.
  • Die Demoszene hat 1k-Binärdateien hervorgebracht.
  • Wenn man sich in die Details von Binärdateien vertieft, kann man tiefe Einsichten gewinnen und sein Wissen erweitern.
  • Ein vollständig eigenständig kompiliertes C#-Hello-World ist mit einer Größe von etwa 440 kB möglich.
  • Das klassische .NET Framework ist veraltet und neue Apps sollten nicht darauf aufbauen.
  • Die Kompilierung mit einem C-Compiler könnte einfacher sein als die Verwendung von .NET.
  • Einige Kommentare bekunden Interesse an nativ kompilierten .NET-Executables.
  • Das Hello.dll-Modul der Oberon+ IDE ist nur 2048 Byte groß.
  • Mit TurboPascal v1 wurde ein Hello-World-COM mit weniger als 1k erstellt.