1
ライブラリlib.soを使用する実行可能ELFファイルがあり、このELFはlib.soの関数Func1を呼び出します。Linuxでライブラリ.soを使用するELFファイルからc関数をフックする方法はありますか?
私はこの関数をフックする必要があります。この実行可能ファイルを変更せずにどうすればいいですか?
ライブラリlib.soを使用する実行可能ELFファイルがあり、このELFはlib.soの関数Func1を呼び出します。Linuxでライブラリ.soを使用するELFファイルからc関数をフックする方法はありますか?
私はこの関数をフックする必要があります。この実行可能ファイルを変更せずにどうすればいいですか?
LD_PRELOADをご覧ください。その環境変数は、実行可能ファイルのアドレス空間に注入されるelf共有オブジェクトに設定できます。プリロードされたオブジェクトの関数は、他のオブジェクトの関数を置き換えることができます。あなたの場合、これはlib.soが組み込まれていない限り動作します-Bsymbolic
。シンボリックリンカーオプションは、リンクパス内の内部呼び出しを解決します。 lib.soにfunc1
が含まれており、-Bsymbolic
が組み込まれていると、その呼び出しを置き換えるのは非常に難しく、おそらくlib.soを変更する必要があります。
確かに。 'fakechroot'ユーティリティのソースを見て、このテクニックを' open() 'のような標準ライブラリ呼び出しを何か他のものに置き換える良い方法の例を見てください。 –
ねえ、ありがとう、それは素晴らしい答えです! – dsfdf
@Sam Hartmanがクリアされる - '-Bsymbolic'は、*' lib.so'内の 'func1' *への呼び出しを中断("フック ")しないようにします。 'executable'から' func1'にコールを挿入することもできます( '-Bdirect'はこの後者のオプションを止めた初期の実験であり、生き残るにはあまりにも多くのことを壊しました)。 –