1 points par GN⁺ 2023-07-10 | 1 commentaires | Partager sur WhatsApp
  • 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

 
GN⁺ 2023-07-10
Commentaires Hacker News
  • Michal Strehovský a créé un jeu Snake de moins de 8 Ko avec .NET.
  • L’exécutable nécessite le runtime installé sur le système, ce qui peut rendre l’article trompeur pour certains lecteurs.
  • La source la plus fiable concernant l’exécutable réel est le binaire Native AOT.
  • La localisation de l’auteur, la station McMurdo en Antarctique, est intéressante.
  • L’alignement des sections est de 0x200 octets, ce qui augmente la taille du fichier.
  • La demoscene a produit des binaires de 1k.
  • Plonger dans les détails d’un binaire peut apporter des insights profonds et enrichir ses connaissances.
  • Un Hello World C# compilé de manière entièrement autonome peut faire environ 440 kB.
  • Le framework .NET classique est obsolète et les nouvelles applications ne devraient pas être construites dessus.
  • Compiler avec un compilateur C peut être plus simple que d’utiliser .NET.
  • Certains commentaires expriment de l’intérêt pour les exécutables .NET compilés en natif.
  • Le module Hello.dll de l’IDE Oberon+ ne fait que 28 octets.
  • Un Hello World .com de moins de 1k a été construit avec TurboPascal v1.