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