383バイトで動くWindowsアプリ、x86アセンブリの限界に挑む

HelloAssembly The smallest possible complete Windows application

383バイトで動くWindowsアプリ、x86アセンブリの限界に挑む

Dave's Garageの動画シリーズで紹介された、x86アセンブリで書かれた最小のWindowsアプリケーションを実現するプロジェクト。タイトルバーやメッセージループ、テキスト描画などの基本機能を備えた完全なGUIアプリを、わずか383バイト(Yasm版)で実現している。リポジトリには、PEヘッダーを手書きした版やシェルコード技法を適用した版など、さまざまな最適化手法が含まれており、それぞれのビルド手順とサイズが比較されている。ウイルススキャナが悪性コードと誤検知する可能性がある点も注意喚起されている。

小さければ小さいほど良い!
  1. rfgplk

    「最小の可能性」とはまさに1命令のことだ。おそらく0xc3(ret)か0x90(nop)だろう。問題は「完全なWindowsアプリケーション」をどう定義するかで、ABI準拠にしたいかどうかで答えは大きく異なる。しかし、純粋なバイナリファイルを読み込み、実行可能としてマッピングして実行するカスタムローダー/エグゼキュータを作ることを妨げるものは何もない。

  2. abcd_f

    MS-DOS用の最小の意味のあるプログラムは、正確に2バイトだった:

    FA F4

    これはCLI HLTで、実質的にマシンをデッドロックさせた。明らかに.comファイルとして保存する必要があり、.exeとしては不可だった。

  3. ggerules

    Windowsとアセンブリは楽しいテーマだ!

    「Windows」と「アセンブリ言語」という検索語を入れると、あらゆる種類の本が出てくる。私が最初にこのテーマを探求するきっかけとなった本(1993年)はこれだ.... [0]

    アセンブリとWindowsに関するより最新の扱いについては.... IDEのソースコードも付属している。Ray Seyfarthの本[1]を参照。

    [0] Windows Assembly Language & Systems Programming: Object Oriented & Low-Level Systems Programming in Assembly Language for Windows 3.X

    [1] Introduction to 64 Bit Windows Assembly Language Programming: Fourth Edition

    ISBN-13: 978-1543138849, ISBN-10: 1543138845

  4. delta_p_delta_x

    CRTをバイパスしてWindows APIに直接対抗するのは興味深い。とはいえ、これらはUSER.32.DLLとKERNEL32.DLLに大部分の重労働を依存している。

    これは「アセンブリでの最小のhello world」に少し似ているが、コードは呼び出し規約をセットアップして、ゼロ終端の文字列を`write`に渡すだけだ。クールだが、Cでももう少し簡単にできるだろう。アセンブリの多く(リンクされたリポジトリ内のものも含む)は、プラットフォームの呼び出し規約のための簿記だ。

  5. haunter

    一方、Unixの世界では45バイトまで小さくできる。https://www.muppetlabs.com/~breadbox/software/tiny/teensy.ht...

この日のほかの記事

2026-08-25