2017-09-18 20 views

答えて

3

LD_PRELOADをご覧ください。その環境変数は、実行可能ファイルのアドレス空間に注入されるelf共有オブジェクトに設定できます。プリロードされたオブジェクトの関数は、他のオブジェクトの関数を置き換えることができます。あなたの場合、これはlib.soが組み込まれていない限り動作します-Bsymbolic。シンボリックリンカーオプションは、リンクパス内の内部呼び出しを解決します。 lib.soにfunc1が含まれており、-Bsymbolicが組み込まれていると、その呼び出しを置き換えるのは非常に難しく、おそらくlib.soを変更する必要があります。

+0

確かに。 'fakechroot'ユーティリティのソースを見て、このテクニックを' open() 'のような標準ライブラリ呼び出しを何か他のものに置き換える良い方法の例を見てください。 –

+0

ねえ、ありがとう、それは素晴らしい答えです! – dsfdf

+0

@Sam Hartmanがクリアされる - '-Bsymbolic'は、*' ​​lib.so'内の 'func1' *への呼び出しを中断("フック ")しないようにします。 'executable'から' func1'にコールを挿入することもできます( '-Bdirect'はこの後者のオプションを止めた初期の実験であり、生き残るにはあまりにも多くのことを壊しました)。 –

関連する問題