1 pontos por GN⁺ 2023-07-10 | 1 comentários | Compartilhar no WhatsApp
  • Explora os limites do formato de arquivo de módulo .NET para criar o menor executável que imprime "Hello, World!" na saída padrão.
  • Para o experimento, o autor define regras arbitrárias: usar um ponto de entrada gerenciado implementado em C# ou CIL, executar no .NET Framework 4.x.x e não ter dependências de terceiros.
  • Para reduzir gradualmente o tamanho do executável, ele desativa anotações de referência anulável, escreve manualmente o módulo .NET, remove importações e relocações base, elimina metadados desnecessários e otimiza o uso de strings ASCII.
  • O resultado final é um executável de 889 bytes, o menor tamanho teoricamente possível para um arquivo .NET PE válido.
  • O artigo fornece exemplos de código e explicações de cada etapa realizada para reduzir o tamanho do executável.
  • O autor destaca a importância de entender o formato de arquivo e de tomar decisões estratégicas para otimizar o tamanho do executável.
  • Mover a string para um segmento de preenchimento não utilizado reduz o arquivo em 13 bytes.
  • Remover a referência a mscorlib pode economizar espaço no binário.
  • Cortar a VersionString no diretório de metadados .NET economiza bytes adicionais.
  • O tamanho final do binário é de 834 bytes, podendo ser reduzido ainda mais para 476 bytes com compressão.
  • Mesmo sendo um projeto sem grande utilidade prática, explorar os limites de sistemas existentes pode ser divertido.
  • O autor disponibiliza o código-fonte completo no GitHub para referência.
  • O artigo discute engenharia reversa, code golf e otimização de arquivos PE.
  • O autor compartilha sua experiência e incentiva explorações adicionais para reduzir o tamanho do arquivo.
  • Este artigo foi licenciado pelo autor sob CC BY 4.0.

1 comentários

 
GN⁺ 2023-07-10
Comentários do Hacker News
  • Michal Strehovský criou um jogo da cobrinha com menos de 8 KB usando .NET.
  • Este artigo pode confundir as pessoas porque o executável exige um runtime instalado no sistema.
  • A fonte confiável para executáveis reais são os binários Native AOT.
  • A localização do autor é a interessante Estação McMurdo, na Antártida.
  • O alinhamento de seção é de 0x200 bytes, o que aumenta o tamanho do arquivo.
  • A demoscene já produziu binários de 1k.
  • Investigar os detalhes de um binário pode gerar insights profundos e enriquecer o conhecimento.
  • Um Hello World em C# totalmente compilado de forma independente pode ter cerca de 440 kB.
  • O .NET Framework clássico foi descontinuado e novos apps não deveriam ser construídos sobre ele.
  • Compilar usando um compilador C pode ser mais fácil do que usar .NET.
  • Alguns comentários expressam interesse em executáveis .NET compilados nativamente.
  • O módulo Hello.dll do IDE Oberon+ tem apenas 2048 bytes.
  • Um Hello World .com com menos de 1k foi construído usando TurboPascal v1.