jprobe
Rev.3を表示中。最新版はこちら。
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





