- 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
Komentar Hacker News