我开始开发内核模块,我想知道所有知道哪些模块正在运行以删除它们的方法(包括它们隐藏的模块)。
例如下面的模块有两行为了隐藏他。(这是典型的rootkit开发技巧)
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
MODULE_LICENSE("GPL");
int example_init(void);
void example_exit(void);
module_init(example_init);
module_exit(example_exit);
int example_init(void) {
list_del_init(&__this_module.list); // Deletes entry from list and reinitialize it
kobject_del(&THIS_MODULE->mkobj.kobj); // Unlink kobject from hierarchy
printk("Example: module loaded\n");
return 0;
}
void example_exit(void) {
printk("Example: module removed\n");
}
加载模块时,您可以使用 dmesg、lsmod、modinfo、modprobe、/proc/modules、/sys/module 或 /proc/kallsyms 查看信息
我的问题是是否存在知道(和删除)这个模块的方法?显然, rmmod 不起作用,因为该模块没有出现在 /proc/modules 列表中。