- 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
Hacker-News-Kommentare