c - insmod:错误:无法插入模块 kprobe_example.ko:不允许操作

标签 c linux-kernel fork insmod kprobe

我指的是: http://www-users.cs.umn.edu/~boutcher/kprobes/kprobes.txt.html了解 kprobe。我使用了文档中给出的 kprobe_example.c。

我使用 makefile 编译了它(代码取自同一文档)

我遇到编译错误,因为我的内核版本是 4.2,并且 struct pt_regs 中的一些字段已更改。所以我用 ip 替换了 eip,用 kprobe_example.c 中的 flag 替换了 eflag,即 https://gist.github.com/murlee417/87c2eb43a6afa1954b05404a07813e81 。然后我就可以编译成功了。

现在,作为 root 用户,我做了:

#insmod kprobe_example.ko

我得到了:

insmod: ERROR: could not insert module kprobe_example.ko: Operation not permitted

我的消息缓冲区有:

#dmesg  
[ 4537.478408] Couldn't find do_fork to plant kprobe

请帮助我解决此错误并使 insmod 正常工作。

最佳答案

在 x86 中 do_fork() 称为 sys_fork(),因此更改代码如下

/* For each probe you need to allocate a kprobe structure */
static struct kprobe kp = {
    //.symbol_name  = "do_fork",
    .symbol_name    = "sys_fork",
};

关于c - insmod:错误:无法插入模块 kprobe_example.ko:不允许操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39567227/

相关文章:

C 小代码将无法工作。

c - 应用程序未收到 iptable 修改的 Netlink 通知

javascript - Node JS Fork TCP 客户端

c - C while 循环中的 fork() 和 wait() ?

PHP:pcntl_fork() 的真正作用是什么?

c++ - 在 C++ linux 中将字符串写入串口

c - 为什么 C 从未实现 "stack extension"?

android - 选择安卓wifi channel

有人可以告诉我如何创建这个非常简单的 makefile 吗?

linux - Linux内核如何拦截发送到U盘的数据?