目標は、Linux のすべてのシステム コールにフックを追加することです。つまり、300 の Linux システム コールが呼び出される前にフック関数が呼び出されるようにする必要があります。
ハックがありsys_call_table
ます (例: [ここ]) が、1 つまたはいくつかのシステム コールしかフックできません。つまり、read()
ハイジャックする必要がある場合、sys_read
エントリはsys_call_table
フック ハンドラを持つ新しい関数に変更されます。
もちろん、300 個のシステムコール エントリすべてを手動でフックすることもできます。しかし、コードをほとんど変更しない、よりエレガントなアプローチを探しています。
entry_64.S
可能なアプローチは、存在するファイルを変更することですENTRY(system_call)
。entry_64.S
ただし、Linux カーネル モジュールを使用してライブ システムをハックする必要があるため、実行中の Linux システムのメモリ イメージを変更するのは困難です。
だから私の質問は:
entry_64.S
設計が理にかなっている場合、カーネル コードが存在するライブ メモリ領域 (カーネル コード セグメント) を変更する方法は?- 一般に、Linux src コードの 1 か所 (または少数) を変更して、すべての sys 呼び出しをフックできるようにする方法が意味をなさない場合。
PS: プラットフォーム: Linux 3.16 および x86_64
PS2: 繰り返しますが、私の質問はsys_call_table
、以前のスタック オーバーフローの質問のハックとは異なります。詳細については、パラグラフ 2 を参照してください。