jprobe


Rev.2を表示中。最新版はこちら

jprobeはkprobeで実装されており、その時の引数が継承して関数をフックする。以下はカーネル関数do_sys_openをフックし、新規作成でファイル名がaaaの時、ファイル名をhogehogeにする。

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/kprobes.h>
#include <linux/fs.h>

MODULE_DESCRIPTION("jprobe test");
MODULE_AUTHOR("y.kitamura");
MODULE_LICENSE("GPL");

static long jprobe_do_sys_open(int dfd, char __user *filename, 
                                         int flags, umode_t mode)
{
       if (flags & O_CREAT && !strcmp(filename, "aaa")) {
               printk("create %s file to hogehoge\n", filename);
               strcpy(filename, "hogehoge");
       }
       jprobe_return();
       return 0;
}

static struct jprobe jprobe_entry = {
       .entry                  = jprobe_do_sys_open,
       .kp = {
               .symbol_name    = "do_sys_open",
       },
};

static int __init jprobe_init(void)
{
       int ret;

       ret = register_jprobe(&jprobe_entry);
       if (ret < 0) {
               return -1;
       }
       return 0;
}

static void __exit jprobe_exit(void)
{
       unregister_jprobe(&jprobe_entry);
}

module_init(jprobe_init)
module_exit(jprobe_exit)

実行結果
[root@localhost lkm]# insmod jprobe_test.ko
[root@localhost lkm]# echo "data to aaa" > aaa
[root@localhost lkm]# cat hogehoge
data to aaa
[root@localhost lkm]# dmesg
  :
[  826.516923] create aaa file to hogehoge

補足

検証時は、if (flags & O_CREAT && !strcmp(filename, "aaa"))で、条件しておかないと、システム下でdo_sys_openが呼ばれており、システムが不安定になるようです。






最終更新 2012/07/18 17:01:26 - north
(2012/07/18 17:00:41 作成)


検索

アクセス数
3584428
最近のコメント
コアダンプファイル - sakaia
list_head構造体 - yocto_no_yomikata
勧告ロックと強制ロック - wataash
LKMからのファイル出力 - 重松 宏昌
kprobe - ななし
ksetの実装 - スーパーコピー
カーネルスレッドとは - ノース
カーネルスレッドとは - nbyst
asmlinkageってなに? - ノース
asmlinkageってなに? - よろしく
Adsense
広告情報が設定されていません。