- En explorant les limites du format de fichier des modules .NET, l’auteur crée le plus petit exécutable capable d’afficher "Hello, World!" sur la sortie standard.
- Pour l’expérience, l’auteur fixe des règles arbitraires : utiliser un point d’entrée managé implémenté en C# ou en CIL, exécutable sur .NET Framework 4.x.x, et sans dépendances tierces.
- Afin de réduire progressivement la taille de l’exécutable, il désactive les annotations de références nullables, écrit manuellement le module .NET, supprime les imports et les relocations de base, retire les métadonnées inutiles et optimise l’utilisation des chaînes ASCII.
- Le résultat final est un exécutable de 889 octets, soit la taille minimale théoriquement possible pour un fichier .NET PE valide.
- L’article fournit des exemples de code et des explications pour chaque étape ayant permis de réduire la taille de l’exécutable.
- L’auteur souligne l’importance de comprendre le format de fichier et de prendre des décisions stratégiques pour optimiser la taille d’un exécutable.
- Déplacer la chaîne vers un segment de padding inutilisé réduit le fichier de 13 octets.
- Supprimer la référence à mscorlib permet d’économiser de l’espace dans le binaire.
- Tronquer la VersionString du répertoire de métadonnées .NET permet d’économiser encore quelques octets.
- La taille finale du binaire est de 834 octets, et elle peut encore être réduite à 476 octets après compression.
- Même s’il s’agit d’un projet sans utilité pratique, explorer les limites des systèmes existants peut être amusant.
- L’auteur fournit l’intégralité du code source sur GitHub à titre de référence.
- L’article aborde la rétro-ingénierie, le code golf et l’optimisation des fichiers PE.
- L’auteur partage son expérience et encourage à poursuivre l’exploration pour réduire encore la taille des fichiers.
- Cet article est publié par l’auteur sous licence CC BY 4.0.
1 commentaires
Commentaires Hacker News