2008年12月13日土曜日

環境変数:LD_PRELOAD

これを用いると,プログラムの変更なしに任意の関数をフックすることができるようです.
……こわい!!笑

環境変数 LD_PRELOAD - 技術メモ帳が分かりやすかったので参考にさせていただきました.

ある関数名を定義し,それを共有オブジェクトとして指定し,プログラムを実行します.
同名関数が存在した場合は上書きすることができるため,関数のフックが可能です.

以下,やり方を.
プログラムhooktest.cを作成し,共有オブジェクトとしてコンパイル.
% gcc -fPIC -shared -o hooktest.so hooktest.c
そして環境変数に指定してメインのプログラムを実行
% LD_PRELOAD=/home/test/hooktest.so ./main
*プログラムを実行する場所と,共有オブジェクトの場所関係を考慮しなくても済ませるため,絶対パスを利用した方がいいカモ

0 件のコメント: