理由の詳細には触れずに、ローダブル モジュールからカーネル関数とシステム コールを置き換えるクリーンな (可能な限り) 方法を探しています。私の最初のアイデアは、いくつかの関数をオーバーライドするコードを作成し、元の関数を使用して (可能であれば関数を呼び出す可能性があります)、独自のコードを追加することでした。重要なのは、私が作成する関数には元の関数の名前が必要であるため、他のコードがそれにアクセスしようとすると、代わりに私の関数にアクセスすることです。
コードを適切な関数に投げ込むだけで、これをカーネルで直接 (比較的) 簡単に行うことができますが、カーネル (または C) コーディングの実践が必ずしも恐ろしいものではない小さな C マジックを誰かが知っているかどうか疑問に思っていました。同じ結果です。
#defines と typedefs の考えが頭に浮かびますが、頭の中でそれをハッキングすることはできません。
要するに、Linuxカーネルの関数を(モジュールから)効果的にオーバーライドする方法を知っている人はいますか?
編集:尋ねられたので、基本的にカーネル内から特定の機能(ディレクトリの作成/削除など)をログに記録したいのですが、健全性のために、大きなパッチを書く必要があるのではなく、ロード可能なモジュールが理にかなっているようですカーネルコードを変更し、変更ごとに再コンパイルします。カーネルに最小限のコードを追加しても問題ありませんが、ほとんどの作業をモジュールにオフロードしたいと考えています。