1 puntos por GN⁺ 2023-07-10 | 1 comentarios | Compartir por WhatsApp
  • Explora los límites del formato de archivo de módulos de .NET para crear el ejecutable más pequeño que imprima "Hello, World!" en la salida estándar.
  • Para el experimento, el autor establece reglas arbitrarias: usar un punto de entrada administrado implementado en C# o CIL, ejecutar en .NET Framework 4.x.x y no depender de terceros.
  • Para reducir gradualmente el tamaño del ejecutable, desactiva las anotaciones de referencias anulables, escribe manualmente el módulo .NET, elimina importaciones y reubicaciones base, quita metadatos innecesarios y optimiza el uso de cadenas ASCII.
  • El resultado final es un ejecutable de 889 bytes, el tamaño mínimo teóricamente posible para un archivo PE de .NET válido.
  • El artículo ofrece ejemplos de código y explicaciones de cada paso realizado para reducir el tamaño del ejecutable.
  • El autor destaca la importancia de entender el formato de archivo y de tomar decisiones estratégicas para optimizar el tamaño del ejecutable.
  • Mover la cadena a un segmento de relleno no utilizado reduce el archivo en 13 bytes.
  • Eliminar la referencia a mscorlib puede ahorrar espacio en el binario.
  • Recortar el VersionString del directorio de metadatos de .NET ahorra bytes adicionales.
  • El tamaño final del binario es de 834 bytes y, al comprimirse, puede reducirse aún más hasta 476 bytes.
  • Aunque es un proyecto sin mucha utilidad práctica, explorar los límites de los sistemas existentes puede ser divertido.
  • El autor ofrece el código fuente completo en GitHub como referencia.
  • El artículo habla de ingeniería inversa, code golf y optimización de archivos PE.
  • El autor comparte su experiencia y anima a seguir explorando formas adicionales de reducir el tamaño del archivo.
  • Este artículo está licenciado por el autor bajo CC BY 4.0.

1 comentarios

 
GN⁺ 2023-07-10
Comentarios en Hacker News
  • Michal Strehovský creó un juego de Snake de menos de 8 KB usando .NET.
  • Este artículo puede confundir a la gente porque el ejecutable requiere un runtime instalado en el sistema.
  • Una fuente confiable para ejecutables reales son los binarios Native AOT.
  • La ubicación del autor es la interesante estación McMurdo en la Antártida.
  • La alineación de secciones es de 0x200 bytes, por lo que aumenta el tamaño del archivo.
  • La demoscene ha producido binarios de 1k.
  • Profundizar en los detalles de un binario puede dar ideas muy valiosas y enriquecer el conocimiento.
  • Un Hello World de C# compilado de forma completamente independiente puede tener un tamaño de alrededor de 440 kB.
  • El framework clásico de .NET está obsoleto y las nuevas apps no deberían construirse sobre él.
  • Compilar usando un compilador de C puede ser más fácil que usar .NET.
  • Algunos comentarios expresan interés en ejecutables .NET compilados de forma nativa.
  • El módulo Hello.dll del IDE Oberon+ pesa solo 2048 bytes.
  • Se construyó un Hello World .com de menos de 1k usando TurboPascal v1.