タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

LD_PRELOADに関するkoyudoonのブックマーク (2)

  • LD_PRELOADを使ったテスト(C言語編)

    困難なテスト 一般に、テストを自動化する場合、テスト対象のプログラムやコードに対するインプットとアウトプットを制御する必要があります。 コードが綺麗に抽象化され、テストデータを外部から入力しやすいインターフェースが用意されていれば、ユニットテストのコードを書くことができますが、そうではないケースも多いのではないでしょうか。 その場合、テストコードを書けるようにリファクタリングを行うことになるのでしょうが、テストコードなしでのリファクタリングが必要になり、一般に困難な作業になります。 ここでは、共有ライブラリとLD_PRELOADという環境変数を使うことで、コードに手を加えることなく外部から対象のプログラムの挙動を制御する方法を紹介します。 dateコマンド それでは例として、dateコマンドで表示される日時を制御することを考えてみましょう。 まず、dateコマンドを実行すると次のように日時

  • 環境変数 LD_PRELOAD - 技術メモ帳

    LD_PRELOAD という環境変数に、共有オブジェクトを指定すると 任意のプログラムを実行する時にその共有オブジェクトを読み込ませる事が出来るらしい。 そして、もし読み込ませたときに シンボル名 が衝突していたときは、 先に定義されたシンボル名が優先されるという仕様になっているらしい。 そこから考えられるのが、 LD_PRELOAD でわざと同じ名前のラッパー関数を作成して、 ロギング処理を注入するという事だ。(アスペクト指向だ!!) (今度やってみよう。) とりあえず、以下は LD_PRELOAD で同名関数を上書きできる例です。 まず、main.c 1 #include <stdio.h> 2 3 int main() { 4 puts("hello world!!"); 5 return 0; 6 } ただ単に、puts 関数を呼び出しています。 実行すると、当然のように hell

  • 1