在 Linux-5.8.18 中无法 kprobe 内核函数

问题描述

我刚刚使用以下代码检查了 Linux-5.8.18 中的 kprobe,但它似乎没有按预期工作。

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/mm.h>
#include <linux/kprobes.h>
#include <linux/init.h>
#include <linux/version.h>

MODULE_DESCRIPTION("kprobe test");
MODULE_LICENSE("GPL");

int kprobe_handler(struct kprobe *p,struct pt_regs *reg) //long start,size_t len_in,int bhv)
{
        printk("XXXXXXXXXXXX Being called by %d\n",current->pid);
        return 0;
}

static void handler_post(struct kprobe *p,struct pt_regs *regs,unsigned long flags)
{
        printk("XXXXXXXXXXXX Being called\n");
        return;
}
static struct kprobe kprobe_entry = {
        .pre_handler    = kprobe_handler,.post_handler   = handler_post,.symbol_name    = "do_madvise",};

static int __init kprobe_test_init(void)
{
        int ret;

        ret = register_kprobe(&kprobe_entry);
        if (ret < 0) {
                return ret;
        }
        printk("Initializing kprobe,KP.addr %px\n",kprobe_entry.addr);
        return 0;
}

static void __exit kprobe_test_exit(void)
{
        unregister_kprobe(&kprobe_entry);
        printk("Finalizing kprobe\n");
}

module_init(kprobe_test_init);
module_exit(kprobe_test_exit);

我试图探测do_madvise()

register_kprobe() 成功了,但是当应用程序在用户空间中调用 madvise() 时,我提供的 kprobe 处理程序没有内核日志。似乎没有调用 kprobe 处理程序,或者没有正确探测 do_madvise()。

谢谢,

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)