タグ

LD_PRELOADに関するMonMonMonのブックマーク (4)

  • ptraceより100倍以上高速なエミュレートを実現 バイナリの書き換えでシステムコールをフックする

    Kernel/VM探検隊は、カーネルやVM、およびその他なんでもIT技術の話題ジャンルについて誰でも何でも発表してワイワイ盛り上がろうという会です。yasukata氏は、バイナリの書き換えで、システムコールをフックする「Zpoline」の仕組みについて紹介しました。 システムコールをフックしたくなった理由 yasukata氏(以下、yasukata):yasukataといいます。発表を始めます。 今回は、「Zpoline」という、バイナリを書き換えることでシステムコールをフックする仕組みを紹介します。ここではx84-64のCPUで動作するLinuxを想定しています。(スライドを示して)ソースコードはこちらにURLがあるので、よろしければ見てみてください。あとでスライドも公開するので、そちらも併せてご覧ください。 まず、なぜシステムコールをフックしたくなったのかですが、個人的にカーネルに実装

    ptraceより100倍以上高速なエミュレートを実現 バイナリの書き換えでシステムコールをフックする
  • GCCのコンパイルオプションで関数トレーサ - torutkのブログ

    このの「#77 関数へのenter/exitをフックする」で、GCCのコンパイルオプション-finstrument-functionsを使い、関数が呼び出された時、関数から復帰するときにフックを入れる方法が紹介されています。フック関数のシグニチャは以下です。 void __cyg_profile_func_enter(void* func_addr, void* call_site); void __cyg_profile_func_exit(void* func_addr, void* call_site); このフック処理に渡されるアドレスから関数名を出して、関数の実行を追う簡易な関数トレーサを作成します。アドレスから関数に変換する方法で一番簡単そうなのは、同じの「#62 dlopenで実行時に動的リンクする」でglibcのGNU拡張として紹介されているdladdr関数です。 #i

  • LD_PRELOAD を Mac で - EAGLE 雑記

    昨日、大学の図書館で偶然 BINARY HACKS という以前から読んでみたかったを見つけた。 Binary Hacks ―ハッカー秘伝のテクニック100選 作者: 高林哲,鵜飼文敏,佐藤祐介,浜地慎一郎,首藤一幸出版社/メーカー: オライリー・ジャパン発売日: 2006/11/14メディア: 単行(ソフトカバー)購入: 23人 クリック: 383回この商品を含むブログ (223件) を見るただ、残念なことに GNU/Linux での話が前提になってしまっていて、Mac OS X などの他のプラットホームでの話がほとんどなかった。 Valgrind とか strace, ltrace とかも Mac OS X で使いたいなー。 で、HACK #60 に「LD_PRELOAD で共有ライブラリを差し換える」というのがあったんだけど、これと同様なことを Mac OS X でやる方法がわかっ

    LD_PRELOAD を Mac で - EAGLE 雑記
  • LD_PRELOADを使ったテスト(C言語編)

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

  • 1