1 điểm bởi GN⁺ 2023-07-10 | 1 bình luận | Chia sẻ qua WhatsApp
  • Khám phá giới hạn của định dạng tệp mô-đun .NET để tạo ra tệp thực thi nhỏ nhất có thể in "Hello, World!" ra đầu ra chuẩn.
  • Để phục vụ thí nghiệm, tác giả đặt ra một số quy tắc tùy ý: dùng điểm vào được quản lý triển khai bằng C# hoặc CIL, chạy trên .NET Framework 4.x.x và không có phụ thuộc bên thứ ba.
  • Để từng bước giảm kích thước tệp thực thi, tác giả tắt chú thích tham chiếu nullable, viết thủ công mô-đun .NET, loại bỏ import và base relocation, xóa metadata không cần thiết, và tối ưu việc sử dụng chuỗi ASCII.
  • Kết quả cuối cùng là một tệp thực thi 889 byte, tương ứng với kích thước tối thiểu khả dĩ về mặt lý thuyết của một tệp .NET PE hợp lệ.
  • Bài viết cung cấp ví dụ mã và giải thích cho từng bước được thực hiện nhằm giảm kích thước tệp thực thi.
  • Tác giả nhấn mạnh tầm quan trọng của việc hiểu định dạng tệp và đưa ra các quyết định chiến lược để tối ưu kích thước tệp thực thi.
  • Việc chuyển chuỗi vào một phân đoạn đệm không dùng đến giúp giảm thêm 13 byte cho tệp.
  • Loại bỏ tham chiếu tới mscorlib có thể tiết kiệm không gian trong tệp nhị phân.
  • Cắt ngắn VersionString trong thư mục metadata .NET giúp tiết kiệm thêm byte.
  • Kích thước cuối cùng của tệp nhị phân là 834 byte, và khi nén có thể giảm tiếp xuống 476 byte.
  • Dù là một dự án không có nhiều ý nghĩa thực tiễn, việc khám phá giới hạn của các hệ thống hiện có vẫn có thể rất thú vị.
  • Tác giả cung cấp toàn bộ mã nguồn trên GitHub để tham khảo.
  • Bài viết thảo luận về reverse engineering, code golf và tối ưu tệp PE.
  • Tác giả chia sẻ trải nghiệm của mình và khuyến khích tiếp tục khám phá thêm để giảm kích thước tệp.
  • Bài viết này được tác giả cấp phép theo CC BY 4.0.

1 bình luận

 
GN⁺ 2023-07-10
Ý kiến trên Hacker News
  • Michal Strehovský đã tạo một trò chơi rắn bằng .NET với kích thước dưới 8KB.
  • Bài viết này có thể khiến mọi người bối rối vì tệp thực thi cần runtime đã được cài trên hệ thống.
  • Nguồn đáng tin cậy về tệp thực thi thực sự là binary Native AOT.
  • Vị trí của tác giả là trạm McMurdo ở Nam Cực, khá thú vị.
  • Kích thước tệp tăng lên vì căn chỉnh section là 0x200 byte.
  • Demoscene từng tạo ra các binary 1k.
  • Việc đào sâu vào chi tiết của binary có thể mang lại hiểu biết sâu sắc và làm phong phú kiến thức.
  • Một chương trình C# Hello World được biên dịch hoàn toàn độc lập có thể có kích thước khoảng 440 kB.
  • .NET Framework cổ điển đã bị loại bỏ và không nên dùng để xây dựng ứng dụng mới.
  • Có thể dùng trình biên dịch C để biên dịch sẽ dễ hơn là dùng .NET.
  • Một số ý kiến bày tỏ sự quan tâm đến các tệp thực thi .NET được biên dịch native.
  • Module Hello.dll của IDE Oberon+ chỉ có 2048 byte.
  • Đã build được tệp Hello World com nhỏ hơn 1k bằng TurboPascal v1.