標準のシステム コール (SYS_mkdir など) を独自の実装に置き換える必要があります。
Stackoverflow に関するこの質問を含むいくつかの情報源を読んだようにsys_call_table
、カーネル バージョン以降、シンボルはエクスポートされません2.6
。
次のコードを試しました:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/unistd.h>
#include <asm/syscall.h>
int (*orig_mkdir)(const char *path);
....
int init_module(void)
{
orig_mkdir=sys_call_table[__NR_mkdir];
sys_call_table[__NR_mkdir]=own_mkdir;
printk("sys_mkdir replaced\n");
return(0);
}
....
残念ながら、次のコンパイラ エラーが表示されます。
error: assignment of read-only location ‘sys_call_table[83]’
システムコールを置き換えるにはどうすればよいですか?
編集:カーネルにパッチを適用せずに解決策はありますか?