- .NET モジュールのファイル形式の限界を探り、標準出力に "Hello, World!" を表示する最小の実行ファイルを作成します。
- 実験のために、筆者は C# または CIL で実装されたマネージド エントリポイントを使い、.NET Framework 4.x.x 上で実行され、サードパーティ依存がないことという任意のルールを設定します。
- 実行ファイルのサイズを段階的に縮小するため、null 許容参照アノテーションを無効化し、.NET モジュールを手作業で記述し、インポートとベース再配置を削除し、不要なメタデータを取り除き、ASCII 文字列の利用を最適化します。
- 最終結果は、理論上可能な有効な .NET PE ファイルの最小サイズである 889 バイトの実行ファイルです。
- 記事では、実行ファイルのサイズを縮小するために行った各段階について、コード例と説明を提供しています。
- 筆者は、ファイル形式を理解し、実行ファイルサイズを最適化するために戦略的な判断を行う重要性を強調しています。
- 未使用のパディング セグメントに文字列を移動すると、ファイルは 13 バイト小さくなります。
mscorlib への参照を削除すると、バイナリの領域を節約できます。
- .NET メタデータ ディレクトリの
VersionString を切り詰めると、さらにバイトを節約できます。
- バイナリの最終サイズは 834 バイトで、圧縮すると 476 バイトまでさらに小さくできます。
- 意味のないプロジェクトであっても、既存システムの限界を探るのは楽しいことがあります。
- 筆者は参考用として完全なソースコードを GitHub で公開しています。
- 記事では、リバースエンジニアリング、コードゴルフ、PE ファイル最適化について論じています。
- 筆者は自身の経験を共有し、ファイルサイズ縮小に関するさらなる探究を促しています。
- この記事は筆者により CC BY 4.0 でライセンスされています。
1件のコメント
Hacker Newsのコメント