モジュールなどを介してシステムコールを動的に追加する方法はありますか? sys_call_table[]
モジュールがインストールされているときに、配列を変更してネイティブではなくオーバーライドされた関数を取得するだけで、既存のシステム コールをモジュールでオーバーライドできる場所を見つけましたが、新しいシステム コールとモジュールでこれを行うことはできますか?
5661 次
2 に答える
12
いいえ、sys_call_table
固定サイズです:
const sys_call_ptr_t sys_call_table[__NR_syscall_max+1] = { ...
すでにお気づきかもしれませんが、できる最善の方法は、既存のシステム コールをインターセプトすることです。
于 2010-03-07T04:21:19.607 に答える
0
既存のシステム コールをインターセプトする (カーネルで何かを実行する) ことは、場合によっては正しい方法ではありません。たとえば、ユーザー空間ドライバーがカーネルで何かを実行する必要がある場合、そこに何かを送信するか、カーネルから何かを読み取る必要がありますか?
通常、ドライバの場合、正しい方法は ioctl() 呼び出しを使用することです。これは 1 つのシステム コールに過ぎませんが、ioctl() を介して異なるパラメータを渡すことにより、異なるカーネル関数またはドライバ モジュールを呼び出すことができます。
上記は、ユーザー制御のカーネルコード実行用です。
データの受け渡しには、procfs または sysfs ドライバーを使用してカーネルと通信できます。
PS: 一般に OS 全体に影響するシステム コールをインターセプトする場合、安全に実行するという問題を解決する方法について心配する必要があります。他の誰かがシステム コールを途中で呼び出していて、コードを変更/インターセプトした場合はどうなりますか?
于 2014-05-26T03:33:59.550 に答える