LD_PRELOAD
を使用してLinuxカーネル関数の1つを上書きすることはできますか?カーネルレベル関数でLD_PRELOADを使用する
たとえば、私のプログラムfooserver
のリッスンソケットのcookie_hash
機能をLinux/net/ipv4/syncookie.c
に変更したいとします。私はLD_PRELOADを使用してそれを行うことはできますか、またはそのためにカーネルを再コンパイルする必要がありますか?
その他のオプションはありますか?
おかげで、
LD_PRELOAD
を使用してLinuxカーネル関数の1つを上書きすることはできますか?カーネルレベル関数でLD_PRELOADを使用する
たとえば、私のプログラムfooserver
のリッスンソケットのcookie_hash
機能をLinux/net/ipv4/syncookie.c
に変更したいとします。私はLD_PRELOADを使用してそれを行うことはできますか、またはそのためにカーネルを再コンパイルする必要がありますか?
その他のオプションはありますか?
おかげで、
いいえ、カーネルの機能を置き換えるためにLD_PRELOADを使用することはできません。
カーネルを再コンパイルする必要があります。
機能がカーネルモジュール内にある場合は、カーネルを再起動する必要なく、モジュールをアンロードし、再コンパイルして再ロードすることができます。
これが頻繁に行われる場合は、2台目のコンピュータまたは仮想マシンを使用して、プログラミング中のコンピュータを再起動する必要はありません。
カーネル機能を無効にするには、kprobesまたはsystemtapを使用する必要があります。再コンパイルする必要はありません。
Linuxカーネルでも同様のことができます。 これは簡単な操作ではありませんが、次に行うべきことは次のとおりです。
を元関数「cookie_hash」を呼び出す。しかし、一般的に、このアプローチは動作します。
LD_PRELOADトリックがうまくいきます動的にリンクされたライブラリのみあなたが話しているeコードは、静的にリンクされている可能性が最も高いです。あなたが運が良ければ、ロード可能なモジュールに座ってください。この場合、モジュールを交換することができます。 –
@EugeneSh .:ユーザーが簡単にカーネル機能を置き換えることができれば、重大なセキュリティ上の問題はありませんか? – Olaf
マルウェアを除いて:なぜあなたはこれをしたいですか? – Olaf