2010-12-16 21 views
0

プログラムは通常、いくつかのライブラリに依存しており、他のプログラムにも依存することがあります。私はWineのようなプロジェクトを見て、どのようなプログラムが何を作り出しているのか、彼らはどのように考えているのでしょうか?実行時にプログラムから呼び出しをキャッチし、それらを他の呼び出しにマップする

Linux環境では、実行可能ファイルが実行時にどのような呼び出しによってキャッチされ、他の呼び出しにマップされているかを知るために使用されるアプローチは何ですか?余分な読書のためのリソースへ

任意のコードスニペットや参照が大幅に高く評価される:)

+0

ソースコードファイル内の呼び出しを静的に文書化する方法、または実行時に何かを行う方法を意味しますか?どちらも意味はありませんが、特に2番目の方法は使用する技術に大きく依存します。 –

+0

それを指摘してくれてありがとう、私は実際に実行時に意味した。私が興味を持っているのはアプローチです。言語にとらわれないタグはちょうどそこにあったので、誰かがポイントを明確にしたいなら、どんな言語のコードサンプルも置くことができます。ちょうど質問と投稿を編集しました。 – Saif

+0

linuxでstraceコマンドを確認してください。実行可能ファイル/コマンドが作成するすべての呼び出しを一覧表示します。これがあなたが知りたいと思ったものだと思います。 – Arunmu

答えて

1

は、Linux上で使用すると、LD_PRELOAD環境変数を探しています。これにより、プログラムが要求する前にライブラリがロードされます。ターゲットプログラムによってロードされたものに一致する関数定義を提供すると、その代わりにあなたのバージョンが呼び出されます。

プログラムがどの機能を呼び出すのかは実際には分かりません。ただし、共有ライブラリ内のすべての関数を取得してそれらのすべてを実装することはできます。あなたは実際には関数をキャッチではない、あなたは単にそれらを再実装しています。

Wineのようなプロジェクトでは、このような場合がありますが、すべてではありません。また、動的ライブラリのいくつかを書き換えます。 Win32がDLLをロードすると、実際にはネイティブバージョンではなくワインバージョンがロードされます。これは基本的には、関数を自分で置き換えるのと同じ概念です。

詳細については、LD_PRELOADを参照してください。

関連する問題