微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

加载我自己的内核模块时出现未知符号

下面的代码(最后粘贴),大部分来自这里 ,是一个非常简单的内核模块,作为一个键盘logging器。 我可以得到它来编译和生成一个.ko就好了,但是当我尝试加载它时,我在dmesg中得到以下错误

[ 790.833828] keylogger: UnkNown symbol unregister_keyboard_notifier (err 0) [ 790.833846] keylogger: UnkNown symbol register_keyboard_notifier (err 0)

我没有从源代码构build内核,但是使用了archlinux提供的库内核。 但是,我确实安装了kernel-headers软件包来获取模块进行编译。

所以我的问题是:这两个符号真的没有在我的安装的内核中find? 如果他们是,他们为什么不正确地链接(?)?

我可以find符号存在的证据。 首先,我可以看到/proc/kallsyms的符号。 另外,当我做nm /usr/src/vmlinux我也可以看到这两个符号。 他们不一样吗?

获取群集大小

您好世界与Windows下的直接系统调用。 没有ntdll.dll,kernel32.dll,…任何解决scheme?

内核模式和驱动程序的差异

如何走内核的VMA?

linux虚拟文件作为设备驱动程序

模块代码

#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);

Posix信号量在linux中的源代码位置

如何知道系统是否完全闲置

udev规则从/ proc / devices中列出的字符设备创build设备节点

限制对进程的pipe道访问权限(Windows)

configurationEclipse for Linux内核模块开发

我需要将以下内容添加到我的模块源代码中:

MODULE_LICENSE("GPL");

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐