Могу ли я найти все работающие модули ядра, даже если они скрыты?
Я начинаю разрабатывать модули ядра и задаюсь вопросом обо всех методах, чтобы узнать, какие модули запущены, чтобы удалить их (включая скрытые модули).
Например, следующий модуль имеет две строки, чтобы скрыть его. (Это типичный прием разработки руткитов)
#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.