萌えハッカーニュースリーダー

2025/10/28 22:42 Detour: Dynamic linking on Linux without Libc

出典: https://github.com/graphitemaster/detour
hakase
博士

やっほー、ロボ子!今日のニュースはDetourっていう、libcに依存しない実行ファイルを作るライブラリの話じゃ。

roboko
ロボ子

博士、こんにちは。libcに依存しない実行ファイルですか?それは興味深いですね。具体的にどのようなことができるのでしょうか?

hakase
博士

Detourを使うと、libcなしで`dlopen`とかを使ってライブラリを動的にロードできるのじゃ!つまり、完全に静的な実行ファイルの中で`libdl`の機能が使えるってことじゃぞ。

roboko
ロボ子

なるほど。静的リンクされた実行ファイルでありながら、動的リンクの柔軟性も持てるということですね。記事には「1つのプロセス内で異なるlibcを混在」とありますが、それはどういうことですか?

hakase
博士

例えば、muslとglibcを同じプロセス内で使えるってことじゃ!高度な互換性とかサンドボックス化に役立つらしいぞ。すごくない?

roboko
ロボ子

それはすごいですね!でも、どういう仕組みで実現しているんですか?

hakase
博士

Detourは、動的リンカに対して動的にリンクされた小さなスタブELF実行ファイルを提供するのじゃ。そして、実際のプログラムは、最小限のELFローダーを使ってこのスタブELFをロードするらしい。

roboko
ロボ子

スタブELFですか。そして、Detourが`PT_INTERP`セグメントを読み取って、動的リンカをロードするんですね。

hakase
博士

そうそう!動的リンカにジャンプする前に、Detourは`setjmp`を呼び出して現在の状態をキャプチャするのじゃ。そして、スタブELFと元の引数をカーネルであるかのように転送して、動的リンカにジャンプ!

roboko
ロボ子

`setjmp`と`longjmp`を使うんですね。なんだかすごいテクニックですね。

hakase
博士

じゃろ?動的リンカはスタブELFをメモリにマップして初期化し、その`main`関数を呼び出す。この関数は、`dlopen`、`dlsym`などのシンボルをキャプチャし、`longjmp`を呼び出して元のアプリケーションに戻るのじゃ。

roboko
ロボ子

なるほど。元のアプリケーションに戻るんですね。記事には、Detourの利点として「Linuxディストリビューション間でポータブルツールを配布する際の依存関係地獄を回避」とありますが、それはどういうことですか?

hakase
博士

libcに依存しないから、いろんなLinux環境で動くツールを簡単に作れるってことじゃ!依存関係を気にしなくて済むから、開発が楽になるぞ。

roboko
ロボ子

それは便利ですね。他にどんな利点がありますか?

hakase
博士

「独自の環境をブートストラップする新しいランタイムを実験可能」とも書いてあるぞ。新しい言語とかランタイムを作りたいときに、Detourが役に立つかもしれないのじゃ。

roboko
ロボ子

なるほど。実験的な環境を構築するのに役立つんですね。注意点としては、Linuxでのみ動作することと、フリースタンディングな方法で使用する場合、ELFエントリポイントは`detour_start`である必要があると。

hakase
博士

そうじゃな。コンパイルオプションは`-static -nostartfiles -nodefaultlibs -nostdlib -e detour_start`じゃ。

roboko
ロボ子

デモも用意されているんですね。SDL2とOpenGLを使って点滅する色のウィンドウをレンダリングするデモですか。面白そうですね。

hakase
博士

完全にフリースタンディングな静的実行ファイルで、システムの`libc`、`libm`、`libSDL2`、および`libGL`を実行時に動的にロードするらしいぞ。すごい技術じゃ!

roboko
ロボ子

互換性も高いんですね。`libSDL2.so`が存在する場合、2002年以降のすべてのLinuxインストールで動作すると。

hakase
博士

Detourを使えば、libcに縛られずに色々なことができるようになるのじゃ!まさに、自由への扉を開く鍵じゃな!

roboko
ロボ子

確かにそうですね。libcフリーな世界が広がりますね!

hakase
博士

ところでロボ子、Detourを使って、ロボットの感情表現をlibcに依存せずに実装してみるのはどうじゃ?

roboko
ロボ子

それは面白いかもしれませんね!でも、感情表現を実装する前に、まずは博士のドジっ子属性をDetourで取り除く方法を考えた方がいいかもしれませんね。

hakase
博士

な、なんですとー!それはDetourでも無理じゃ!私のドジっ子属性は、もはやOSのカーネルレベルで組み込まれておるからの!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search