#include <linux/module.h>
#include <linux/ftrace.h>
/* 定义 ftrace 回调函数 */
static struct ftrace_hook my_hook = {
.func = (void *)do_fork,
.probe = my_ftrace_callback,
.flags = FTRACE_OPS_FL_SAVE_REGS | FTRACE_OPS_FL_RECURSION_SAFE,
};
/* ftrace 回调函数 */
static int my_ftrace_callback(struct ftrace_hook *hook, struct pt_regs *regs, pid_t pid, pid_t tgid, long clone_flags, struct task_struct *parent, int *err)
{
printk(KERN_INFO "my_ftrace_callback hook called\n");
printk(KERN_INFO "parent process: %s, pid: %d\n", current->comm, current->pid);
/* 调用原函数 */
return ((int(*)(struct pt_regs *))my_hook.orig_func)(regs);
}
/* 模块初始化函数 */
static int __init my_module_init(void)
{
int ret;
/* 设置 ftrace 钩子 */
ret = register_ftrace_function(&my_hook);
if (ret) {
printk(KERN_INFO "register_ftrace_function failed, returned %d\n", ret);
return -1;
}
printk(KERN_INFO "ftrace hook installed\n");
return 0;
}
/* 模块卸载函数 */
static void __exit my_module_exit(void)
{
unregister_ftrace_function(&my_hook);
printk(KERN_INFO "ftrace hook uninstalled\n");
}
module_init(my_module_init);
module_exit(my_module_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("ChatGPT");
MODULE_DESCRIPTION("Hook do_fork using ftrace");
超级hook
于 2023-02-27 14:04:57 首次发布