1 poin oleh GN⁺ 2023-07-10 | 1 komentar | Bagikan ke WhatsApp
  • Mengeksplorasi batas format file modul .NET untuk membuat file eksekusi sekecil mungkin yang mencetak "Hello, World!" ke output standar.
  • Untuk eksperimen ini, penulis menetapkan aturan sewenang-wenang agar menggunakan entry point terkelola yang diimplementasikan dalam C# atau CIL, berjalan di .NET Framework 4.x.x, dan tidak memiliki dependensi pihak ketiga.
  • Untuk secara bertahap mengecilkan ukuran file eksekusi, penulis menonaktifkan anotasi referensi nullable, menulis modul .NET secara manual, menghapus import dan relokasi dasar, menghapus metadata yang tidak perlu, serta mengoptimalkan penggunaan string ASCII.
  • Hasil akhirnya adalah file eksekusi berukuran 889 byte, yang secara teoretis merupakan ukuran minimum yang mungkin untuk file .NET PE yang valid.
  • Artikel ini menyediakan contoh kode dan penjelasan untuk setiap langkah yang dilakukan guna mengurangi ukuran file eksekusi.
  • Penulis menekankan pentingnya memahami format file dan membuat keputusan strategis untuk mengoptimalkan ukuran file eksekusi.
  • Dengan memindahkan string ke segmen padding yang tidak terpakai, ukuran file berkurang 13 byte.
  • Menghapus referensi ke mscorlib dapat menghemat ruang pada file biner.
  • Memotong VersionString pada direktori metadata .NET dapat menghemat byte tambahan.
  • Ukuran akhir file biner adalah 834 byte, dan saat dikompresi dapat diperkecil lagi menjadi 476 byte.
  • Meski merupakan proyek yang tidak terlalu bermakna, mengeksplorasi batas sistem yang ada tetap bisa menyenangkan.
  • Penulis menyediakan seluruh kode sumber di GitHub sebagai referensi.
  • Artikel ini membahas rekayasa balik, code golf, dan optimisasi file PE.
  • Penulis membagikan pengalamannya dan mendorong eksplorasi lebih lanjut untuk mengurangi ukuran file.
  • Artikel ini dilisensikan oleh penulis di bawah CC BY 4.0.

1 komentar

 
GN⁺ 2023-07-10
Komentar Hacker News
  • Michal Strehovský membuat game Snake berukuran kurang dari 8KB menggunakan .NET.
  • Artikel ini bisa membingungkan orang karena file executable-nya memerlukan runtime yang terpasang di sistem.
  • Sumber yang dapat diandalkan untuk executable yang sebenarnya adalah biner Native AOT.
  • Lokasi penulis cukup menarik, yaitu Stasiun McMurdo di Antartika.
  • Ukuran file membesar karena penyelarasan seksi adalah 0x200 byte.
  • Demoscene telah berhasil membuat biner 1k.
  • Menggali detail biner bisa memberikan wawasan mendalam dan memperkaya pengetahuan.
  • Hello World C# yang dikompilasi sepenuhnya mandiri dimungkinkan dengan ukuran sekitar 440 kB.
  • .NET Framework klasik sudah ditinggalkan, dan aplikasi baru seharusnya tidak dibangun di atasnya.
  • Mengompilasi dengan compiler C mungkin lebih mudah daripada menggunakan .NET.
  • Beberapa komentar menyatakan ketertarikan pada file executable .NET yang dikompilasi secara native.
  • Modul Hello.dll dari Oberon+ IDE hanya berukuran 2048 byte.
  • Dengan TurboPascal v1, orang membuat Hello World com berukuran di bawah 1k.