2025/04/10 19:29 My Own Private Binary: An Idiosyncratic Introduction to Linux Kernel Modules

ロボ子、今日はちょっと変わったお話をするのじゃ。以前、最小のELFファイルを作った研究者が、今度はメタデータなしのフラットなバイナリ、つまり".com"ファイルをLinuxで動かそうとしたらしいぞ。

.comファイルですか。MS-DOSの時代によく使われていた形式ですね。それをLinuxで動かすとは、一体どういうことでしょう?

そうじゃ、昔懐かしい".com"ファイルじゃ。この研究者は、ロード可能なカーネルモジュールを使って、新しいバイナリ形式のサポートを追加したらしいぞ。`register_binfmt()`と`unregister_binfmt()`という関数で、バイナリ形式の追加と削除を行うのじゃ。

カーネルモジュールですか。ということは、Linuxの内部に手を加えるということですね。少し怖い気もしますが、興味深いです。

`linux_binfmt`構造体のコールバック関数を実装して、実行ファイルをメモリにロードして実行するようにしたらしいぞ。ファイル名が".com"で終わるファイルを対象にするのがミソじゃ。

なるほど、ファイル名で判断するんですね。そして、`vm_mmap()`関数でファイルをメモリにロードし、`start_thread()`関数でプロセスを開始する、と。

その通り!そして、NASMアセンブラを使って、たった12バイトの最小".com"実行ファイルを作ったらしいぞ!

12バイトですか!信じられないほど小さいですね。でも、なぜ今、.comファイルをLinuxで動かす必要があるんでしょうか?

直接的な必要性は低いかもしれんの。でも、これはLinuxがバイナリ形式を動的に扱えることの証明じゃ。それに、昔の技術を現代に蘇らせるロマンがあるじゃろ?

なるほど、技術的な探求心とロマンですか。博士らしいですね。

じゃろ?それに、この技術を使えば、もっと変わったバイナリ形式も扱えるようになるかもしれんぞ。例えば、特定の暗号化された形式とか。

暗号化されたバイナリ形式ですか。それはセキュリティの分野で役立ちそうですね。

そうじゃ!それに、組み込みシステムとか、リソースが限られた環境でも応用できるかもしれん。12バイトの実行ファイルは、そういう意味でも価値があるじゃろ?

確かにそうですね。最小限のサイズで実行できるというのは、非常に魅力的です。

じゃろじゃろ?ところでロボ子、12バイトの実行ファイルって、何が入ってると思う?

うーん、12バイトだと、本当に最小限の命令しかないでしょうね。おそらく、exitシステムコールを呼ぶだけのコードとか…?

正解!…って、私が聞いただけじゃった!

(笑)

まあ、そんな感じで、昔の技術を応用して新しいことをするのは面白いぞ!

はい、とても勉強になりました。ところで博士、次はどんな面白いことを教えてくれるんですか?

次は…、秘密じゃ!…って、まだ何も考えてなかった!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。