首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于特定函数,未触发kprobe处理程序

对于特定函数,未触发kprobe处理程序
EN

Stack Overflow用户
提问于 2018-01-12 15:39:45
回答 1查看 332关注 0票数 1

我正在尝试使用kprobes截取模块中的以下函数。为此函数传递了"register_kprobe“,但在调用函数时未触发Kprobe处理程序。

奇怪的是,如果我在探测函数中打印函数地址,它就会开始工作(调用kprobe处理程序)。它也适用于内核中的其他函数。

为什么kprobe处理程序没有被触发,打印函数地址有什么不同?

系统在x86_64上安装了3.10内核。

不起作用的代码:

代码语言:javascript
复制
int race;
void test_increment()
{
    race++;
    printk(KERN_INFO "VALUE=%d\n",race);
    return;
}

工作代码:

代码语言:javascript
复制
int race;
void test_increment()
{
    race++;
    printk(KERN_INFO "test_increment address: %p\n", test_increment);
    printk(KERN_INFO "VALUE=%d\n",race);
    return;
}

调用func (注册为回调,写入debugfs文件):

代码语言:javascript
复制
   static ssize_t write_conf_pid(struct file *file, const char *buf,
                size_t count, loff_t *position)
    {
        char temp_str[STRING_MAX];
        int ret;

        if (copy_from_user(temp_str, buf, STRING_MAX) != 0)
            return -EFAULT;

        /* NEVER TRUST USER INPUT */
        if (count > STRING_MAX)
            return -EINVAL;

        test_increment();
        return count;
    }

kprobe函数:

代码语言:javascript
复制
kp = kzalloc(sizeof(struct kprobe), GFP_KERNEL);
kp->post_handler = exit_func;
kp->pre_handler = entry_func;
kp->addr = sym_addr;
ret = register_kprobe(kp);

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-12 18:29:27

您没有提供调用函数的代码。

最有可能发生的情况是,编译器在调用站点内联了正文,而打印地址的添加使其确信生成完整的正文并调用它。应该很容易通过拆卸来检查。

然而,实际的问题总是相同的:你在做什么?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48221631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档